BufferedReader 을 사용해 표준 입력을 받을 경우 readLine() 을 사용해서 한 줄씩 받아올 수 있다. 이럴 경우, 구분자를 기준으로 토큰을 나누고 싶을 때 StringTokenizer 과 Split 으로 토큰을 나눌 수 있다. 둘의 차이점은 뭘까?
| 메서드 | 리턴값 | 리턴값 설명 |
|---|---|---|
boolean hasMoreTokens() | true 또는 false | 남아있는 토큰이 있으면 true, 없으면 false |
String nextToken() | 문자열 (String) | 다음 토큰을 문자열로 반환 |
String nextToken(String delim) | 문자열 (String) | 지정한 구분자 기준으로 분리한 다음 토큰을 문자열로 반환 |
boolean hasMoreElements() | true 또는 false | 남아있는 엘리먼트(토큰)가 있으면 true, 없으면 false |
Object nextElement() | 객체 (Object) | 다음 토큰을 Object 타입으로 반환 (실제로는 문자열) |
int countTokens() | 정수 (int) | 현재 남아있는 토큰의 개수를 정수로 반환 |
<예제코드>
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) {
String str = "Let's#go#2025";
StringTokenizer token = new StringTokenizer(str, "#", true);
while (token.hasMoreTokens()) {
System.out.println(token.nextToken());
}
}
}
<출력결과>
Let's
#
go
#
2025
- 반환을 String 배열로 받음
- 구분 기호를 문자열이 아닌 정규표현식으로 받음
<예제코드>
public class Main {
public static void main(String[] args) {
String str = "Let's go 2025 with gyodon";
String[] splitted = str.split(" ");
for (String s : splitted) {
System.out.println(s);
}
}
<출력결과>
Let's
go
2025
with
gyodon
- 문자열을 정규식에 맞춰서 분리
- limit 만큼 문자열을 자름
<예제코드>
String str = "Let's go 2025 with gyodon";
String[] splitted = str.split(" ", 3);
for (String s : splitted) {
System.out.println(s);
}
<출력결과>
Let's
go
2025 with gyodon
| 항목 | tokenizer | split |
|---|---|---|
| 기능 | 의미 단위(단어, subword 등)로 텍스트를 분리 | 지정한 구분자 기준으로 문자열을 단순 분리 |
| 성능 | 느림 (복잡한 알고리즘 포함, 정밀도는 높음) | 빠름 (간단한 문자열 처리, 정밀도는 낮음) |
참고자료
https://dev-coco.tistory.com/94 [슬기로운 개발생활:티스토리]
https://inpa.tistory.com/entry/JAVA-☕-Split-StringTokenizer-문자열-자르기-비교하기# [Inpa Dev 👨💻:티스토리]