본문 바로가기

Java 기본 문법 - 참조 서적 [이것이 자바다 - 한빛미디어]/9. 기본 API 클래스

8. Java 자바 [API] - StringTokenizer 클래스

문자열이 특정 구분자(delimiter)로 연결되어 있을 경우, 구분자를 기준으로 부분 문자열을 분리하기 위해서는

String 의 split() 메소드를 이용하거나

java.util 패키지의 StringTokenizer 클래스를 이용할 수 있다.

 

split() 은 정규 표현식으로 구분하고, StringTokenizer 는 문자로 구분하는 차이점이 있다.

 

 


1. String 의 split() 메소드

 

split() 메소드는 아래와 같이 호출된다.

정규 표현식을 구분자로 해서 문자열을 분리한 후, 배열에 저장하고 리턴한다.

 

String[] result = “문자열”.split(“정규표현식”);

 

예) “홍길동&이수홍,박연수,김자바-최명호” 문자열이 있을 때,

&, 쉼표(,), - 를 제외하고 사람인 이름만 따로 뽑아내고 싶은 경우

아래와 같이 정규 표현식을 매개값으로 제공하면 된다.

 

String names = text.split(“&|,|-”);

 

예) StringSplitExample.java : 문자열 분리

 

public class StringSplitExample {
    public static void main(String[] args) {
        String text = “홍길동&이수홍,박연수,김자바-최명호”;

        String[] names = text.split(“&|,|-”);

        for(String name : names) {  // 배열 객체 출력
            System.out.println(name);
        }
    }
}

 

 


2. StringTokenizer 클래스

 

문자열이 한 종류의 구분자로 연결되어 있는 경우 사용하면 문자열(토큰 token)을 쉽게 분리할 수 있다.

 

StringTokenizer 객체를 생성 시 첫 번째 매개값으로 전체 문자열을 주고,

두 번째 매개값으로 구분자를 주면 된다.

 

StringTokenizer st = new StringTokenizer(“문자열”, “구분자”);

 

만약 구분자를 생략하면 공백(space)이 구분자가 된다.

 

예를 들어 “/”로 구분되어 있을 경우, 아래와 같이 StringTokenizer 객체를 생성할 수 있다.

 

String text = “홍길동/이수홍/박연수”;

StringTokenizer st = new StringTokenizer(text, “/”);

 

StringTokenizer 객체가 생성되면 부분 문자열을 분리해 낼 수 있는데,

아래 메소드를 이용해서 전체 토큰 수, 남아 있는 토큰 여부를 확인한 다음, 토큰을 읽으면 된다.

 

 

리턴 타입

메소드

설명

int

countTokens()

꺼니재 읺고 남아 있는 토큰의 수

boolean

hasMoreTokens()

남아 있는 토큰이 있는지 여부

String

nextToken()

토큰을 하나씩 꺼내옴

 

nextToken() 메소드로 토큰을 하나 꺼내오면 StringTokenizer 객체에는 해당 토큰이 없어진다.

 

만약 StringTokenizer 객체에서 더 이상 가져올 토큰이 없다면,

nextToken() 메소드는 java.util.NoSuchElementException 예외를 발생시킨다.

 

따라서 nextToken() 메소드를 사용하기 전에 hasMoreTokens() 메소드로 꺼내올 토큰이 있는지 조사한 후,

nextToken() 메소드를 호출하는 것이 좋다.

 

예) StringTokenizerExample.java

 

public class StringTokenizerExample {
    public static void main(String[] args) {
        String text = “홍길동/이수홍/박연수”;

        // 방법 1. 전체 토큰 수를 얻어서 for 문으로 루핑
        StringTokenizer st = new StringTokenizer(text, “/”);
        int countTokens = st.countTokens();  // 전체 토큰 수
        for(int i = 0; i < countTokens; i++) {
            String token = st.nextToken();
            System.out.println(token);
        }
        System.out.println();

        // 방법 2. 남아 있는 토큰을 확인하고 while 문으로 루핑
        st = new StringTokenizer(text, “/”);
        while(st.hasMoreTokens()) {
            String token = st.nextToken();
            System.out.println(token);
        }
    }
}