태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

특수문자를 사용하여 여러 값을 하나의 문자열에 넣고 분리하는 용도로 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의 결과 특성을 확실히 알아야 복잡한 문자열을 토큰으로 나누어 처리할 때 원하는 결과를 얻을 수 있다.
크리에이티브 커먼즈 라이선스
Creative Commons License

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

StringTokenizer의 올바른 사용을 위하여  (0) 2004/03/23
Posted by Alchemist™