Notice
Recent Posts
Recent Comments
Link
쯔이's Dev
StringTokenizer vs split() 본문
반응형
둘 다 문자열을 특정 구분자로 나누어 토큰화(Tokenization)하는 기능을 한다.
그런데, 몇 가지 차이점이 있다.
결론부터 말하면, 요즘은 split( )을 더 많이 사용!!!
하지만 StringTokenizer는 특정 상황에서 더 편리할 수 있다.
1. StringTokenizer와 split( )의 차이점
비교 항목 | StringTokenizer | split( ) |
반환 타입 | 개별 토큰을 nextToken()으로 하나씩 가져옴 | **배열(String[])**로 반환 |
사용 방식 | while 문을 사용하여 하나씩 가져와야 함 | split() 호출 후 바로 배열로 사용 가능 |
성능 | 빠름 (메모리 사용량 적음) | 조금 더 무거움 (배열 생성 필요) |
여러 구분자 사용 | 가능 (여러 개의 구분자를 한 번에 지정 가능) | **정규 표현식(Regex)**을 사용해야 함 |
빈 문자열 처리 | 연속된 구분자는 무시 (빈 문자열 포함하지 않음) | 빈 문자열도 포함할 수 있음 |
2. StringTokenizer vs split( ) 예제 비교
✅ StringTokenizer 사용 예제
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) {
String str = "Hello World Java";
// 공백(" ")을 기준으로 문자열을 토큰화
StringTokenizer tokenizer = new StringTokenizer(str, " ");
while (tokenizer.hasMoreTokens()) {
System.out.println(tokenizer.nextToken()); // ✅ 하나씩 출력
}
}
}
✅ 출력 결과
Hello
World
Java
✔ StringTokenizer는 하나씩 꺼내서 사용할 수 있음.
✔ hasMoreTokens()를 사용해야 함.
✅ split() 사용 예제
public class Main {
public static void main(String[] args) {
String str = "Hello World Java";
// 공백(" ")을 기준으로 나누기
String[] tokens = str.split(" ");
for (String token : tokens) {
System.out.println(token); // ✅ 배열로 저장 후 출력
}
}
}
✅ 출력 결과
Hello
World
Java
✔ split()은 한 번에 배열로 저장되므로 쉽게 사용할 수 있음.
✔ 반복문을 사용하여 바로 출력 가능.
3. 주요 차이점
1) split( )은 빈 문자열도 포함할 수 있음
📌 StringTokenizer는 연속된 구분자를 무시하지만, split()은 빈 문자열을 포함할 수 있음!
String str = "Hello World Java"; // 중간에 공백 2개
✔ StringTokenizer 사용
StringTokenizer tokenizer = new StringTokenizer(str, " ");
while (tokenizer.hasMoreTokens()) {
System.out.println(tokenizer.nextToken());
}
✅ 출력
Hello
World
Java
🚨 연속된 공백은 무시됨!
✔ split() 사용
String[] tokens = str.split(" ");
for (String token : tokens) {
System.out.println(token);
}
✅ 출력
Hello
World
Java
🚨 빈 문자열도 포함됨!
✔ 빈 문자열을 제거하려면 split(" +")처럼 정규식을 사용해야 함.
2) 여러 개의 구분자 사용 가능 여부
📌 StringTokenizer는 여러 개의 구분자를 동시에 사용할 수 있음.
String str = "Java,Python|C++-JavaScript";
// 여러 구분자 사용 가능 (쉼표, 파이프, 하이픈)
StringTokenizer tokenizer = new StringTokenizer(str, ",|-");
while (tokenizer.hasMoreTokens()) {
System.out.println(tokenizer.nextToken());
}
✅ 출력
Java
Python
C++
JavaScript
📌 split()은 정규 표현식을 사용해야 여러 구분자로 나눌 수 있음
String[] tokens = str.split("[,|\\-]");
for (String token : tokens) {
System.out.println(token);
}
✅ 출력 (같은 결과)
Java
Python
C++
JavaScript
🚨 즉, split()은 정규 표현식을 사용해야 여러 구분자를 처리 가능.
>> 어떤 걸 써야 할까?
문자열을 간단히 분리하고 배열로 다루고 싶음 | split() 사용 (String[]로 바로 저장 가능) |
토큰을 하나씩 순차적으로 처리해야 함 | StringTokenizer 사용 (nextToken()으로 하나씩 꺼내기) |
여러 개의 구분자로 나누고 싶음 | StringTokenizer 사용 (`new StringTokenizer(str, ", |
연속된 구분자(공백, 쉼표 등)를 무시하고 싶음 | StringTokenizer 사용 (빈 문자열 포함 안 됨) |
정규 표현식을 활용해야 함 | split() 사용 (`split("[, |
즉, split()이 더 범용적으로 많이 사용되지만, StringTokenizer는 특정 상황에서 더 편리할 수도 있음!
>> 최종 정리
비교 항목 | StringTokenizer | split() |
반환 타입 | 하나씩 꺼내서 사용 (nextToken()) | 배열(String[]) 반환 |
사용 방식 | while (hasMoreTokens()) 반복 | 배열을 반복문(for)으로 사용 가능 |
성능 | 빠름 (메모리 사용 적음) | 배열 생성으로 약간 더 무거움 |
여러 개의 구분자 | **가능 (`new StringTokenizer(str, ", | -")`)** |
빈 문자열 처리 | 빈 문자열 무시 (연속된 구분자 무시됨) | 빈 문자열 포함 가능 (정규식 필요) |
>> 결론
✔ 일반적으로 split()이 더 많이 사용됨!
✔ 메모리를 아껴야 하거나, 구분자를 여러 개 쓸 경우 StringTokenizer가 더 편리할 수도 있음.
✔ 정확한 토큰 개수가 필요한 경우 split()을 쓰는 게 좋음!
✔ 빠른 성능과 간단한 문자열 처리가 필요하면 StringTokenizer 사용 가능!
728x90
반응형
'JAVA' 카테고리의 다른 글
containsKey(f)(equals, hashcode 오버라이딩) (0) | 2025.03.27 |
---|---|
String vs StringBuilder (0) | 2025.02.14 |
3-tier 아키텍처(service > dao > db) (2) | 2024.09.30 |