HighCode

블로그 이미지

프알못

모두를 위한 프로그래밍, 보안, IT 정보

서핑보드 타다가 봉변..

잼잼 2016. 9. 27. 17:35


상어...

저작자표시비영리동일조건

'잼잼' 카테고리의 다른 글

서핑보드 타다가 봉변..  (0) 2016.09.27
Posted by 프알못

트랙백

※ 스팸 트랙백 차단중 ...{ ? }

프알못을 위한 Java 04. 조건문 if 와 switch

HighCode/Java 2016. 9. 27. 16:43

오늘은 if와 for문을 알아봅시다


조건문 if 


어디에 왜 쓰이나?


프로그램을 제작하다보면 특정 조건에서만 동작하게 하고픈 로직이 분명 존재하게 됩니다.

사용자 입력값에 따라 다른 값을 넘겨준다던가 할때 유용하게 사용할 수 있겠죠?


if 사용법


1
2
3
4
5
6
7
int var = 3;
 
if(var==3) // 조건문 if. 여기서는 var이 3이면 조건식을 만족한다.
    {
        // 조건식이 만족하면 실행되는 
        System.out.println("I'm "+ var);
    }

cs


3행에서 if문을 써서 조건을 확인하고 있습니다. 여기서는 var이 3일때를 조건으로 놓고 만족한다면 if 내부의 루틴을 실행하게 됩니다.

만약 만족하지 않는다면 if내부의 코드는 실행되지 않습니다.


여러가지 조건을 주기


if문을 통해 여러가지 조건을 충족하도록 조건을 줄 수 있습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int var = 3;
 
if(var==3) 
    {
        System.out.println("I'm "+ var);
    }
else if(var==4) // 추가적인 조건
    {
        System.out.println(" I'm not executable :< ");
    }
else if(var==5)
    {
        System.out.println("blah blah");
    }
else // 아무 조건도 충족 못한다면?
    System.out.println("Fully not matched!");
cs


새로운 키워드가 등장했습니다. else if 와 else.


if else


if문으로 조건을 주고 그 외의 조건을 더 주고 싶다면 if else를 통해 조건을 주면 되겠습니다.

예제에서는 if문 외의 조건을 추가적으로 else if를 통해 2개 더 주고 있습니다.


else


else문은 만약 위 조건식이 모두 충족하지 않을 경우 실행되는 조건입니다. var이 3,4,5 중 하나도 충족하지 않는다면 else문 내의 코드가 실행될것입니다.



if문 내의 if?


if문 내에 if문을 추가적으로 사용할 수 있습니다.


1
2
3
4
5
6
7
8
9
10
int var = 3;
int var2 = 4;
 
if(var==3) 
    {
        if(var2==4) // 이중 if
            {
                System.out.println("var2: "+var2);
            }
    }

cs


if문을 2중으로 사용해서 이런식으로 조건을 줄 수 있습니다. var이 3일경우 처음 조건이 실행되며, 그다음 var2 4일 경우에만 8행의 출력문이 실행되게 됩니다.



if문을 이런식으로 다중으로 사용할 수 있지만 꼭 필요한 경우가 아니라면 이런 방식은 지양하고 코드를 작성하셔야 합니다.

위의 코드라면 이렇게 개선해볼 수 있겠죠?


1
2
3
4
5
6
7
int var = 3;
int var2 = 4;
 
if(var==3 && var2==4) 
    {
        System.out.println("I definitely agree what var is three and var2 is four.");
    }

cs


if문 처음에 조건을 다중으로 주는 방법으로 다중 if문을 회피할 수도 있습니다.

다중if문은 꼭 필요한 경우에만!




조건문 switch


또다른 조건문 switch 입니다.


사용하는이유는 if와 마찬가지로 특정코드실행에 조건을 주기 위함입니다.



swtich 문 사용법 - 예제1


1
2
3
4
5
6
7
8
int var = 3;
 
swtich(var)
{
    case 1: System.out.println(var); break;
    case 2: System.out.println(var); break;
    case 3: System.out.println(var); break;
}

cs


switch 외에 생소한 키워드 case와 break 가 보이는군요.


먼저 switch문의 괄호안에 확인할 타깃을 넣어주세요. -> switch(타깃)

예제에서는 타겟으로 var을 사용하고 있습니다.

그다음 switch문 안에 case라는 키워드를 이용해서 검사할 조건을 넣어주시면 됩니다.


5

6

7
// 타겟이 1일경우
case 1: System.out.println(var); break;
// 타겟이 2일경우
case 2: System.out.println(var); break;
// 타겟이 3일경우
case 3: System.out.println(var); break;
cs


case <조건> : <조건이 만족할때의 실행할 코드> 이런식으로 써주시면 됩니다.


예제에서는 var은 3이니까 case 3 조건을 만족 합니다.


break는 각 조건식마다 맨 마지막에 적어주는 키워드로 현재 진행중인 switch문을 종료합니다.

종료를 시키지 않으면 다른 case문도 조건을 무시하고 실행시키므로 조심하셔야 해요.



나쁜 코드 - 예제 2


1
2
3
4
5
6
7
8
int num = 1;
 
switch(num)
{
    case 1: System.out.println("1만 나오겠지?");
    case 3: System.out.println("이건 실행 안될거야");
    case 5: System.out.println("ㅎㅎㅎㅎ");
}

cs


break문을 쓰지 않은 switch ~ case문 입니다.


[예제 2 실행결과]


1만 나오겠지?

이건 실행 안될거야

ㅎㅎㅎㅎ


break가 없으면 이런 참사가 일어나니 종료시점에서 꼭 써주세요.



if에는 else가 있다면 switch에는? - 예제 3


1
2
3
4
5
6
7
8
9
int num = 10;
 
switch(num)
{
    case 1: System.out.println("1"); break;
    case 2: System.out.println("2"); break;
    case 3: System.out.println("3"); break;
    default: System.out.println(num); break;
}

cs


switch문에도 if의 else 처럼 모든 조건을 충족하지 않으면 실행하는 default 문이 있습니다.

이 예제에서는 num은 조건식을 만족하지 못하므로 default가 실행이 될겁니다.




예제4


1
2
3
4
5
6
7
8
String s = "A";
 
switch(s)
{
    case "A": System.out.println(s); break;
    case "B": System.out.println(s); break;
    case "C": System.out.println(s); break;
}

cs


이렇게 문자열이 타겟이더라도 잘 돌아갑니다.



예제5


1
2
3
4
5
6
7
8
String s = "가나";
 
switch(s)
{
    case "가": System.out.println(s); break;
    case "가나": System.out.println(s); break;
    case "가나다": System.out.println(s); break;
}

cs


유니코드문자도 사용가능!


예제6 - 좋은 가독성


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int num = 10;
 
switch(num)
{
    case 1: 
        System.out.println("1");
        break;
    case 2: 
        System.out.println("2");
        break;
    case 3: 
        System.out.println("3");
        break;
    default: 
        System.out.println(num);
        break;
}
cs




저작자표시비영리동일조건

'HighCode > Java' 카테고리의 다른 글

[JSTL] Map에 있는 elements들을 원하는 순서대로 출력  (0) 2016.12.21
[Spring] Restful한 스프링 @ResponseBody vs @RestController  (1) 2016.12.21
프알못을 위한 Java 04. 조건문 if 와 switch  (0) 2016.09.27
[TIP] 정규표현식(Pattern Matching) 완전 정리!  (6) 2016.09.22
[TIP] 두 날짜 사이의 차이 계산하기  (1) 2016.09.21
프알못을 위한 Java - 02. 문자열 출력  (0) 2016.09.04
Posted by 프알못

트랙백

※ 스팸 트랙백 차단중 ...{ ? }

[TIP] 정규표현식(Pattern Matching) 완전 정리!

HighCode/Java 2016. 9. 22. 17:48

오늘은 자바에서 지원하는 정규표현식을 이용해서 사용자가 설계된 원하는 값만 입력할 수 있도록 코드를 짜보겠습니다.


먼저 예제를 보여드린 뒤 자세히 알아보아요


예제1) 숫자만 허용


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
 
public class OnlyInteger {
    
    public static void main(String[] args) {
        
        Pattern p = Pattern.compile("(^[0-9]*$)");
        
        int onlyNum;
        String inputVal;
        Scanner iStream = new Scanner(System.in);
        
        inputVal = iStream.nextLine();
        Matcher m = p.matcher(inputVal);
        
        if(m.find())
        {
            onlyNum = Integer.parseInt(inputVal);
            System.out.println(onlyNum);
        }
        else
        {
            System.out.println("숫자가 아닌데..?");
        }    
    }
}
Colored by Color Scripter
cs


▲ 사용자 입력값이 숫자인지 검증하는 OnlyInteger Class 입니다.


2
3
import java.util.regex.Matcher;
import java.util.regex.Pattern;
cs


▲ 정규표현식을 사용하기 위해 import해줍니다. 


10
Pattern p = Pattern.compile("(^[0-9]*$)");
cs


▲ 숫자만 허용하는 Pattern p 입니다.


17
Matcher m = p.matcher(inputVal);
cs


▲ inputVal의 값이 저희가 선언한 패턴 p 에 맞는 조건인지 검사해서 m에 저장합니다.


19
if(m.find())
cs


▲ m.find() 는 패턴이 일치하는경우 boolean 형으로 true를 아니면 false를 리턴합니다.


21
onlyNum = Integer.parseInt(inputVal);
cs


▲ inputVal을 int형으로 형변환 해줍니다.



정규표현식 설명


대충 구조는 알았고 그럼 패턴을 만드는 방법을 알아보겠습니다.


10
Pattern p = Pattern.compile("(^[0-9]*$)");
cs


아까 예제1) 에서 사용한 Pattern 을 보면  "(^[0-9]*$)" 이 부분이 바로 패턴 부분입니다.


각각 의미를 알아보면..


표현식

 설명 

 ^

 문자열의 시작

$ 

 문자열의 종료

 .

 임의의 한 문자 (문자의 종류 가리지 않음)

 단, \ 는 넣을 수 없음

 *

 앞 문자가 없을 수도 무한정 많을 수도 있음

+ 

 앞 문자가 하나 이상

? 

 앞 문자가 없거나 하나있음

 []

 문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타낸다. []내에서 ^가 선행하여 존재하면 not 을 나타낸다.

 {}

 횟수 또는 범위를 나타낸다.

 ()

 소괄호 안의 문자를 하나의 문자로 인식 

 |

 패턴 안에서 or 연산을 수행할 때 사용

 \s

 공백 문자

 \S

 공백 문자가 아닌 나머지 문자

 \w

 알파벳이나 숫자

\W 

 알파벳이나 숫자를 제외한 문자

\d 

 숫자 [0-9]와 동일

\D 

 숫자를 제외한 모든 문자

\ 

 정규표현식 역슬래시(\)는 확장 문자
 역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미

(?i) 

 앞 부분에 (?i) 라는 옵션을 넣어주면 대소문자를 구분하지 않음

▲ 출처 : http://lng1982.tistory.com/141


이렇게 되시겠습니다.


예제의 ^[0-9]*$ 를 분석해보면 


^ 으로 우선 패턴의 시작을 알립니다.

[0-9] 괄호사이에 두 숫자를 넣어 범위를 지정해줄 수 있습니다.

* 를 넣으면 글자 수를 상관하지 않고 검사합니다.

$ 으로 패턴의 종료를 알립니다.


즉 , 0부터 9 까지의 수를 글자 수 제한을 하지 않고 검사하는 패턴입니다.


[자주 쓰이는 패턴]


1) 숫자만 : ^[0-9]*$

2) 영문자만 : ^[a-zA-Z]*$

3) 한글만 : ^[가-힣]*$

4) 영어 & 숫자만 : ^[a-zA-Z0-9]*$

5) E-Mail : ^[a-zA-Z0-9]+@[a-zA-Z0-9]+$

6) 휴대폰 : ^01(?:0|1|[6-9]) - (?:\d{3}|\d{4}) - \d{4}$

7) 일반전화 : ^\d{2,3} - \d{3,4} - \d{4}$

8) 주민등록번호 : \d{6} \- [1-4]\d{6}

9) IP 주소 : ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3})



예제2) 영어만 허용 (Not Case Sensitive)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.regex.Pattern;
 
public class EngPattern {
    
    public static void main(String[] args) {
        
        String pattern = "^[a-zA-Z]*$";
        String input = "ABzzzDAWRAWR";
        
        
        
        boolean i = Pattern.matches(pattern, input);
        if(i==true)
        {
            System.out.println(input+"는 패턴에 일치함.");
        }
        else
        {
            System.out.println("패턴 일치하지 않음.");
        }
        
        
    }
    
}
 
Colored by Color Scripter
cs


패턴분석


^[a-zA-Z]*$


a-z 까지 그리고 A-Z 까지 즉, 알파벳은 모두 허용.

* 글자 수 상관하지 않음


-> 알파벳이기만 하면 패턴에 맞음.



예제3) 파일 확장자 확인 1


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package Pattern;
 
import java.util.regex.Pattern;
 
public class ExtendtionPattern {
    
    public static void main(String[] args) {
        
        
        String pattern = "^\\S+.(?i)(txt|pdf|hwp|xls)$";
        String input = "abc.txt";
        
        
        
        boolean i = Pattern.matches(pattern, input);
        if(i==true)
        {
            System.out.println(input+"는 패턴에 일치함.");
        }
        else
        {
            System.out.println("패턴 일치하지 않음.");
        }
    }
 
}
 
Colored by Color Scripter
cs


패턴분석


^\\S+.(?i)(txt|pdf|hwp|xls)$


^ : 시작

\ : \ 가 왔기 때문에 다음에 올 문자는 특수문자로 취급하고 , \다음 특수문자고 오면 그 자체로 취급.

\S : 공백 아닌 문자

+. : .이 반드시 한개는 와야한다.

(?i) : 대소문자 구별하지 않음.

(txt|pdf|hwp|xls) : txt 혹은 pdf 혹은 hwp 혹은 xls 만 허용. | 을 이용한 or 연산!

$ : 끝


-> 공백아닌 문자와 .이 반드시 와야하고 뒤에는 txt, pdf, hwp, xls 만 허용.



예제4) 파일 확장자 1, 2


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.util.regex.Pattern;
 
public class extensionPattern {
    
    public static void main(String[] args) {
    
        String pattern = "^\\S+.(?i)(txt|pdf|hwp|xls)$";
        String input = "Java.pdf";
        
        String pattern2 = "(.+?)((\\.tar)?\\.gz)$";
        String input2 = "library.tar.gz";
        
        
        vaildPattern(pattern, input);
        vaildPattern(pattern2, input2);    
    }
 
    
    public static void vaildPattern(String pattern, String input)
    {
        boolean i = Pattern.matches(pattern, input);
        
        if(i==true)
        {
            System.out.println(input+"는 패턴에 일치함.");
        }
        else
        {
            System.out.println("패턴 일치하지 않음.");
        }
    }
}
 
Colored by Color Scripter
cs


새로 이중 확장자를 구분하는 표현식을 추가했습니다. 여기서는 tar.gz 인지 구분합니다. 한번 테스트 해보세요



저작자표시비영리동일조건

'HighCode > Java' 카테고리의 다른 글

[Spring] Restful한 스프링 @ResponseBody vs @RestController  (1) 2016.12.21
프알못을 위한 Java 04. 조건문 if 와 switch  (0) 2016.09.27
[TIP] 정규표현식(Pattern Matching) 완전 정리!  (6) 2016.09.22
[TIP] 두 날짜 사이의 차이 계산하기  (1) 2016.09.21
프알못을 위한 Java - 02. 문자열 출력  (0) 2016.09.04
프알못을 위한 Java - 01. 프로젝트,클래스 생성  (0) 2016.09.04
Posted by 프알못
  • 복실이
    2018.07.25 10:42

    좋은 내용 감사합니다. 혹시 "일반전화" 패턴 내용 중 "일반전화 : ^\d{2.3} - \d{3,4} - \d{4}$" 에서 "^\d{2.3} 괄호 안의 .가 ,로 바꾸는게 맞는지 문의드립니다.

    • Carpe D!em
      2018.08.03 10:29

      , 콤마가 맞습니다.
      우연히 방문했다가 글 보고 댓글남겨봅니다

    • 프알못
      2018.08.25 17:13 신고

      ,(콤마) 가 맞습니다. 지적 감사드려요!

  • Rudy
    2018.09.07 11:47

    패턴 중 "^\\S+.는 \ 하나가 맞는 듯...

    • Perit
      2018.10.08 16:07

      문자열 내라서 \\\\ 쓰는 게 맞고, 오히려 .이 아니라 \\\\. 이 맞을 듯

  • 정규식어려워
    2018.10.11 16:25

    .바로 뒤에 공백 혹은 줄바꿈 문자가 있는 경우를 찾고싶은데 도저히 모르겠네요 ㅠ^ㅠ 어떻게하면 될지 혹시 조언 구해도 될까요??

트랙백

※ 스팸 트랙백 차단중 ...{ ? }
이전페이지 다음페이지
블로그 이미지

모두를 위한 프로그래밍, 보안, IT 정보

by 프알못

공지사항

    최근...

  • 포스트
  • 댓글
  • 트랙백
  • [SPRING] JSP 주석 정리
  • [Spring] 이클립스(eclipse) 톰캣.. (3)
  • [C] Anti Sandbox
  • 2017년 1월 토렌트 트래커 모음(201..
  • [Spring] Controller 에서 ModelAnd..
  • 더 보기
  • 델파이개발하나요? 아니면 델파이리..
    craz_box ㆍ 2019
  • 7번줄 SimpleDateFormat format = n..
    Mc ㆍ 2018
  • .바로 뒤에 공백 혹은 줄바꿈 문자..
    정규식어려워 ㆍ 2018
  • 문자열 내라서 \\\\ 쓰는 게 맞고,..
    Perit ㆍ 2018
  • 패턴 중 "^\\S+.는 \ 하나가 맞는..
    Rudy ㆍ 2018

태그

  • 토렌트
  • 컴퓨터 청소
  • 악성코드무료치료
  • 자바
  • 맬웨어
  • 백신
  • .트래커
  • 이클립스
  • 소프트웨어
  • CCleaner
  • IT
  • 트렌드
  • 랜섬웨어
  • 2016
  • Python
  • c언어
  • 포털사이트
  • 크랙
  • 파이썬
  • 프리웨어
  • 프로그래밍 언어
  • 악성코드
  • 토렌트 사용법
  • 리버싱
  • 스프링

글 보관함


  • 2018/09
    (1)

  • 2018/08
    (1)

  • 2017/03
    (1)

  • 2017/01
    (1)
«   2020/06   »
일 월 화 수 목 금 토
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        

링크

카테고리

분류 전체보기 (28)
HighCode (14)
C/C++ (1)
Python (1)
Java (11)
C# (0)
Other (1)
UnderCode (6)
Malware (3)
Hacking Tool (1)
Exploit (0)
Cracking (2)
Software (5)
Torrent (3)
Game (0)
Freeware (2)
App (0)
News & Issue (2)
IT꿀팁 (0)
잼잼 (1)

카운터

Total
327,760
Today
21
Yesterday
404
방명록 : 관리자 : 글쓰기
프알못's Blog is powered by daumkakao
Skin info material T Mark3 by 뭐하라
favicon

HighCode

모두를 위한 프로그래밍, 보안, IT 정보

  • 태그
  • 링크 추가
  • 방명록

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • 분류 전체보기 (28)
    • HighCode (14)
      • C/C++ (1)
      • Python (1)
      • Java (11)
      • C# (0)
      • Other (1)
    • UnderCode (6)
      • Malware (3)
      • Hacking Tool (1)
      • Exploit (0)
      • Cracking (2)
    • Software (5)
      • Torrent (3)
      • Game (0)
      • Freeware (2)
      • App (0)
    • News & Issue (2)
    • IT꿀팁 (0)
    • 잼잼 (1)

카테고리

PC화면 보기 티스토리 Daum