특수문자를 사용하여 여러 값을 하나의 문자열에 넣고 분리하는 용도로 StringTokenizer 를 사용하는 경우가 많이 있다.
이때 딜리미터로 사용하는 문자열이 하나의 원소개념으로 생각하기 쉬운데 그렇게 알고 프로그래밍을 하다보면 원하지 않는 결과가 초래될 수 있다.
엄밀히 말해서 딜리미터로 입력되는 문자열은 딜리미터로 사용할 캐릭터의 집합이다. 따라서 2개 이상의 캐릭터를 합쳐서 딜리미터로사용하는 경우 두개의 캐릭터가 연속으로 나오는 경우에만 딜리미터로 인식되는 것이 아니라 두 캐릭터 중 하나만 나오는 경우에라도딜리미터로 인식되어 문자열이 분리된다.
아래의 예제는 StringTokenizer의 사용법을 제대로 이해하지 못하고 작성된 경우의 예이다.
import java.util.*;
public class StringTokenizerTest {
public static void main(String args[]) {
String origin = "alchemist^|차정훈^|별이진다^^;^|alchemist@mycompany.com^|M";
StringTokenizer stn = new StringTokenizer(origin, "^|");
int i = 0;
while(stn.hasMoreTokens()) {
System.out.println((++i)+":"+stn.nextToken());
}
}
}
프로그래머가 원하는 결과는
1:alchemist
2:차정훈
3:별이진다^^;
4:alchemist@mycompany.com
5:M
이었으나 아래 프로그램을 컴파일하여 실행해 보면 다음과 같은 결과가 나온다.
1:alchemist
2:차정훈
3:별이진다
4:;
5:alchemist@mycompany.com
6:M
'별이진다^^;'가 입력문자열에 들어있는데 이중 '^'문자가 딜리미터 중 하나이므로
';'가 또 하나의 토큰으로 나누어진다.
단, "^^"와 같이 딜리미터가 연속되어 나오는 경우에는 하나의 딜리미터로 동작하여 '^'와 '^'사이에 ""의 길이가 0인 문자열이 토큰으로 나오지는 않는다.
위와 같은 StringTokenizer의 결과 특성을 확실히 알아야 복잡한 문자열을 토큰으로 나누어 처리할 때 원하는 결과를 얻을 수 있다.
이때 딜리미터로 사용하는 문자열이 하나의 원소개념으로 생각하기 쉬운데 그렇게 알고 프로그래밍을 하다보면 원하지 않는 결과가 초래될 수 있다.
엄밀히 말해서 딜리미터로 입력되는 문자열은 딜리미터로 사용할 캐릭터의 집합이다. 따라서 2개 이상의 캐릭터를 합쳐서 딜리미터로사용하는 경우 두개의 캐릭터가 연속으로 나오는 경우에만 딜리미터로 인식되는 것이 아니라 두 캐릭터 중 하나만 나오는 경우에라도딜리미터로 인식되어 문자열이 분리된다.
아래의 예제는 StringTokenizer의 사용법을 제대로 이해하지 못하고 작성된 경우의 예이다.
import java.util.*;
public class StringTokenizerTest {
public static void main(String args[]) {
String origin = "alchemist^|차정훈^|별이진다^^;^|alchemist@mycompany.com^|M";
StringTokenizer stn = new StringTokenizer(origin, "^|");
int i = 0;
while(stn.hasMoreTokens()) {
System.out.println((++i)+":"+stn.nextToken());
}
}
}
프로그래머가 원하는 결과는
1:alchemist
2:차정훈
3:별이진다^^;
4:alchemist@mycompany.com
5:M
이었으나 아래 프로그램을 컴파일하여 실행해 보면 다음과 같은 결과가 나온다.
1:alchemist
2:차정훈
3:별이진다
4:;
5:alchemist@mycompany.com
6:M
'별이진다^^;'가 입력문자열에 들어있는데 이중 '^'문자가 딜리미터 중 하나이므로
';'가 또 하나의 토큰으로 나누어진다.
단, "^^"와 같이 딜리미터가 연속되어 나오는 경우에는 하나의 딜리미터로 동작하여 '^'와 '^'사이에 ""의 길이가 0인 문자열이 토큰으로 나오지는 않는다.
위와 같은 StringTokenizer의 결과 특성을 확실히 알아야 복잡한 문자열을 토큰으로 나누어 처리할 때 원하는 결과를 얻을 수 있다.
'Java > Core' 카테고리의 다른 글
| StringTokenizer의 올바른 사용을 위하여 (0) | 2004/03/23 |
|---|





