StringTokenier의 활용법을 알아야겠다고 판단해 이에 대해 정리하고자 한다.
StringTokenizer
java.util에 속하는 StringTokenizer 클래스는 문자열을 지정한 구분자에 맞게 나누는 역할을 한다.
Interface Enumeration<Object>를 구현했다.
생성자
StringTokenizer의 생성자는 아래와 같이 세 가지가 있다.
인자의 용도는 다음과 같다.
String str: 토큰으로 만들 문자열
String delim: 구분자
boolean returnDelims: 구분자도 토큰에 포함시킬 것인지(true면 구분자도 토큰으로 간주한다. default: false)
위 3개의 생성자 중 StringTokenizer(String str)은 구분자를 받지 않는데
그렇다면 무엇을 기준으로 토큰을 생성하는지 궁금해 찾아보았다.
\t, \n, \r, \f를 기준으로 구분한다고 한다.
메서드
StringTokenizer 클래스의 메서드이다.
hasMoreElements()와 nextElement()는 Enumeration 인터페이스 메서드로
우리는 2개를 제외한 countTokens(), hasMoreTokens(), nextToken(), nextToken(String delim)만 알면 된다.
실제로 hasMoreElements()와 nextElement()는 각각 hasMoreTokens()와 nextToken()을 반환한다.
각 메서드의 역할은 다음과 같다.
countTokens() | 현재 남아있는 토큰 수를 반환 |
hasMoreTokens() | 토큰이 남아있는지에 대해 true, false 반환 |
nextToken() | 다음 토큰을 반환 |
nextToken(String delim) | 구분자를 delim으로 바꾼 후 토큰을 반환 |
활용
StringTokenizer에 대해 살펴보았으니 각 생성자와 메서드를 활용해 보자.
StringTokenizer(str, delim) 생성자
아래 코드는 문자열 "10|20|30|40|50"을 구분자 "|"로 나눈다.
import java.util.StringTokenizer;
public class StringToken {
public static void main(String[] args) {
String str = "10|20|30|40|50";
StringTokenizer stringTokenizer = new StringTokenizer(str, "|");
System.out.println("countTokens: " + stringTokenizer.countTokens());
while(stringTokenizer.hasMoreTokens()) {
System.out.println("nextToken: " + stringTokenizer.nextToken());
}
}
}
10, 20, 30, 40, 50 총 5개로 나눴으므로 countTokens()는 5이다.
만약 countTokens()를 while문 안으로 넣는다면 결과는 다음과 같다.
countTokens()는 남아있는 토큰의 개수를 반환한다는 것을 알 수 있다.
StringTokenizer(str, delim, returnDelims) 생성자
아래 코드는 new StringTokenizer(str, "|")에 true를 추가한 것이다.
import java.util.StringTokenizer;
public class StringToken {
public static void main(String[] args) {
String str = "10|20|30|40|50";
StringTokenizer stringTokenizer = new StringTokenizer(str, "|", true);
System.out.println("countTokens: " + stringTokenizer.countTokens());
while(stringTokenizer.hasMoreTokens()) {
System.out.println("nextToken: " + stringTokenizer.nextToken());
}
}
}
구분자도 토큰으로 구분해 countTokens()의 값이 9가 된 것을 확인할 수 있다.
StringTokenizer(str) 생성자
이번엔 위의 코드에서 구분자를 없애보자.
import java.util.StringTokenizer;
public class StringToken {
public static void main(String[] args) {
String str = "10|20|30|40|50";
StringTokenizer stringTokenizer = new StringTokenizer(str);
System.out.println("countTokens: " + stringTokenizer.countTokens());
while(stringTokenizer.hasMoreTokens()) {
System.out.println("nextToken: " + stringTokenizer.nextToken());
}
}
}
결과는 아래와 같다.
구분자를 지정하지 않으면 \t, \n, \r, \f를 기준으로 하는데, 이에 속하는 문자가 없어 한 토큰으로 나온 것이다.
만약 문자열에 "|" 대신 " "를 넣으면 결과는 아래와 같다.
nextToken(delim)
이번엔 중간에 구분자를 바꿔보자.
아래 코드는 문자열 "10|&20|&30|&40|&50"에 대해 구분자를 "|"에서 "&"로 바꾼 결과를 출력한다.
n이 2 이상이 되면 구분자를 바꾼다.
import java.util.StringTokenizer;
public class StringToken {
public static void main(String[] args) {
String str = "10|&20|&30|&40|&50";
StringTokenizer stringTokenizer = new StringTokenizer(str, "|");
int n = 0;
while(stringTokenizer.hasMoreTokens()) {
if(n < 2) {
System.out.println("nextToken: " + stringTokenizer.nextToken());
} else {
System.out.println("nextToken: " + stringTokenizer.nextToken("&"));
}
n++;
}
}
}
아래는 출력 결과이다.
이렇게 나온 이유는 아래와 같다.
'Java > Java' 카테고리의 다른 글
Java - Integer (0) | 2023.09.21 |
---|---|
Java - Collections unmodifiable (0) | 2023.09.19 |
Java - 문자 기반 스트림(Reader, Writer) (1) | 2023.09.14 |
Java - 바이트 기반 스트림(InputStream, OutputStream) (0) | 2023.09.13 |
Java - Gradle Project 생성 (0) | 2023.09.11 |