본문 바로가기
IT/Java

[Java] - 자바 StringTokenizer 클래스를 사용해서 문자열 분리하는 방법 (Split과 차이점)

by 차이나는 개발자 2022. 10. 18.
728x90
반응형

#자바 StringTokenizer 클래스를 사용해서 문자열 분리하는 방법 (Split과 차이점)

 

 

#StringTokenizer 클래스

-StringTokenizer 클래스는 문자열을 구분자를 기준으로 자를때 사용하는 클래스입니다.

-잘라서 나온 문자열들을 토큰이라고 합니다.

 

 

#예시1

-StringTokenizer (String str, String delim) : str 문자열, delim 구분자

-int countTokens() : 토큰의 수를 반홥합니다.

-boolean hasMoreTokens() : 남아 있는 토큰이 있으면 true, 없으면 false를 반환합니다.

-String nextToken() : 토큰을 차례대로 반환합니다.

// 문자열 자르기
String data = "100,200,300,400,500";
int count = 0;
StringTokenizer st1 = new StringTokenizer(data, ",");

while(st1.hasMoreTokens()) {
    System.out.println(st1.countTokens() + ": " + st1.nextToken());
    ++count;
}
System.out.println("totalCount: " + count);

 

-결과

5: 100
4: 200
3: 300
2: 400
1: 500
totalCount: 5

 

 

#예시2

-StringTokenizer (String str, String delim, boolean returnDelims) : str 문자열, delim 구분자, returnDelims : true 일 경우 구분자로 토큰으로 반환합니다.

// 세번째 매개변수에 따라 구분자로 포함할지 결정
String expression = "(100+200)+300*400/500=result";
StringTokenizer st2 = new StringTokenizer(expression, "+-*/=()", true);
//StringTokenizer st2 = new StringTokenizer(expression, "+-*/=()", false);

while (st2.hasMoreTokens()) {
    System.out.print(st2.nextToken());
}

 

-결과

구분자 : +-*/=()

true : (100+200)+300*400/500=result
false : 100200300400500result

 

 

#예시3

-문자열을 다중구분으로 처리해야할때 2중 반복문으로 처리할 수 있습니다.

-첫번째 구분자 |, 두번째 구분자 ,

// 2중 반복문으로 2번 분리
String source2 =
        "1,홍길동,100,200,300|2,김첨지,90,95,100|3,아메바,10,20,30";
StringTokenizer st3 = new StringTokenizer(source2, "|");

while(st3.hasMoreTokens()) {
    String token = st3.nextToken();

    StringTokenizer st4 = new StringTokenizer(token, ",");
    while(st4.hasMoreTokens()) {
        System.out.print(st4.nextToken());
    }
}

 

-결과

1
홍길동
100
200
300
2
김첨지
90
95
100
3
아메바
10
20
30

 

 

#예시4

-StringTokenizer와 Split의 차이점

-Split은 빈 문자열도 토큰으로 인식합니다.

-StringTokenizer는 빈 문자열을 토큰으로 인식하지 않습니다.

// split, StringTokenizer 차이점
String str = "hello,,java,,world";

String[] result = str.split(",");
StringTokenizer st5 = new StringTokenizer(str, ",");

for(int i=0; i < result.length; i++	) {
    System.out.print(result[i] + "|");
}
// 빈 문자열도 토큰으로 인식합니다.
System.out.println(" [split 개수: " + result.length + " ]");

int cnt = 0;
while(st5.hasMoreTokens()) {
    System.out.print(st5.nextToken()+ "|");
    cnt++;
}
// 빈 문자열을 토큰으로 인식하지 않습니다.
System.out.println(" [StringTokenizer 개수: " + cnt + " ]");

 

-결과

hello||java||world| [split 개수: 5 ]
hello|java|world| [StringTokenizer 개수: 3 ]

 

 

 

728x90
반응형

댓글