쯔이's Dev

StringTokenizer vs split() 본문

JAVA

StringTokenizer vs split()

jjhim531 2025. 1. 30. 05:33
반응형

둘 다 문자열을 특정 구분자로 나누어 토큰화(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