[Java] StringTokenizer 사용법 (기준에 따라 문자열 쪼개기)
StringTokenizer는 구분자를 기준으로 문자열을 분리하고 싶을 때 클래스이다.
구분자란 무엇일까?
"양파,당근,마늘,오이,상추"라는 문자열이 있을 때 콤마(,)를 기준으로 나누고 싶다면 콤마(,)가 구분자이다.
"2020년 02월 15일"이라는 문자열이 있을 때 공백을 기준으로 나누고 싶다면 공백이 구분자이다.
"2020-02-15"라는 문자열이 있을 때 '-' 문자를 기준으로 나누고 싶다면 구분자는 '-'이다.
일단 문자열을 쪼개고 싶다면 StringTokenizer 객체를 생성해야 한다. StringTokenizer 객체를 생성할 때에는 나누고 싶은 문자열과 구분자를 적어야 한다. 구분자를 적어주지 않으면 공백을 기준으로 나눈다.
String s = "2020년 2월 15일";
StringTokenizer tokenizer = new StringTokenizer(s); //공백을 기준으로 문자열 s를 나누기 위한 객체
공백을 기준으로 문자열을 나누고 싶다면 이렇게 생성자의 인자로 문자열만 넣어주면 된다.
String s = "2020-02-15";
StringTokenizer tokenizer = new StringTokenizer(s, "-");
특정 문자열을 기준으로 나누고 싶다면 문자열과 구분자를 생성자의 인자로 넣어주면 된다.
이렇게 StringTokenizer 객체를 생성하고 나면 문자열을 쪼개기 위한 준비작업은 다 끝났다.
이제 문자열을 나누면 된다.
일단 StringTokenizer 클래스의 메소드부터 살펴보자.
int countTokens() | 남아있는 토큰의 개수를 반환한다. |
boolean hasMoreTokens() | 남아있는 토큰이 있으면 true, 더 이상 토큰이 없으면 false |
String nextToken() | 토큰을 꺼내온다. |
https://docs.oracle.com/javase/10/docs/api/java/util/StringTokenizer.html
이 메소드들의 사용법은 직접 코드를 보면서 배우는 것이 가장 빠를 거라고 생각한다.
import java.util.StringTokenizer;
public class StringTokenizerTest {
public static void main(String[] args) {
String s = "2020-02-15";
StringTokenizer tokenizer = new StringTokenizer(s, "-");
System.out.println("토큰의 개수: " + tokenizer.countTokens());
while(tokenizer.hasMoreTokens()) {
System.out.println(tokenizer.nextToken());
System.out.println("토큰의 개수: " + tokenizer.countTokens());
}
}
}
import java.util.StringTokenizer;
public class StringTokenizerTest {
public static void main(String[] args) {
String s = "안녕? 여기는 feelcoding 블로그야";
StringTokenizer tokenizer = new StringTokenizer(s);
System.out.println("토큰의 개수: " + tokenizer.countTokens());
while(tokenizer.hasMoreTokens()) {
System.out.println(tokenizer.nextToken());
}
}
}
import java.util.StringTokenizer;
public class StringTokenizerTest {
public static void main(String[] args) {
String s = "2020-02-15";
StringTokenizer tokenizer = new StringTokenizer(s, "-");
System.out.println("토큰의 개수: " + tokenizer.countTokens());
while(tokenizer.hasMoreTokens()) {
System.out.println(tokenizer.nextToken());
}
}
}
import java.util.StringTokenizer;
public class StringTokenizerTest {
public static void main(String[] args) {
String s = "2020-02-15";
StringTokenizer tokenizer = new StringTokenizer(s, "-");
System.out.println("토큰의 개수: " + tokenizer.countTokens());
while(tokenizer.hasMoreTokens()) {
System.out.println(tokenizer.nextToken());
System.out.println("토큰의 개수: " + tokenizer.countTokens());
}
tokenizer.nextToken(); //다 소모한 객체에서 토큰을 뽑아내려고 시도. 예외 발생
}
}
StringTokenizer 객체는 소모적이라서 한 번 사용하면 다시 사용할 수 없다.
다시 사용하고 싶다면 객체를 새로 만들어야 한다. 이미 소모한 객체에서 토큰을 꺼내려고 하면 다음과 같이 NoSuchElementException 예외가 발생한다.
13번째 줄에서 예외가 발생했다고 하는데 그것은 마지막 코드인 tokenizer.nextToken();이다.
따라서 nextToken() 메소드를 사용하기 전에는 반드시 if(객체.hasMoreTokens()) 또는 if(객체.countTokens() > 0)으로 체크해보고 토큰을 뽑아야 한다.