BE/Java

[Java] StringTokenizer

baek-dev 2025. 3. 16. 14:54

✅ StringTokenizer의 모든 요소 (메서드 및 기능)

 

StringTokenizerJava에서 문자열을 특정 구분자로 분리하는 클래스입니다.

사용법이 간단하고 성능이 뛰어나며, split()과 유사하지만 재사용이 불가능한 단점이 있습니다.

 

✅ 1. StringTokenizer 생성자

StringTokenizer는 총 3가지 생성자를 제공합니다.

public StringTokenizer(String str)            // 기본적으로 공백을 구분자로 사용
public StringTokenizer(String str, String delim)  // 사용자가 지정한 구분자(delim)를 사용
public StringTokenizer(String str, String delim, boolean returnDelims) // 구분자도 토큰으로 포함할지 여부

 

📌 예제

StringTokenizer st1 = new StringTokenizer("Java is fun");  // 공백이 기본 구분자
StringTokenizer st2 = new StringTokenizer("Java,Python,C++", ",");  // 쉼표(,)를 구분자로 사용
StringTokenizer st3 = new StringTokenizer("Java,Python,C++", ",", true); // 구분자도 토큰으로 포함

 

✅ 2. 주요 메서드

✅ 1) hasMoreTokens() → 더 이상 남은 토큰이 있는지 확인 (boolean 반환)

StringTokenizer st = new StringTokenizer("Hello World");
while (st.hasMoreTokens()) {
    System.out.println(st.nextToken());
}

📌 hasMoreTokens()true일 때까지 nextToken() 실행

 

✅ 2) nextToken() → 다음 토큰 반환 (String 값)

StringTokenizer st = new StringTokenizer("Java,Python,C++", ",");
System.out.println(st.nextToken()); // Java
System.out.println(st.nextToken()); // Python
System.out.println(st.nextToken()); // C++

📌 nextToken()을 호출하면 다음 토큰으로 이동

📌 더 이상 남은 토큰이 없으면 NoSuchElementException 예외 발생

 

✅ 3) nextToken(String delim) → 새로운 구분자로 변경 후 다음 토큰 반환

StringTokenizer st = new StringTokenizer("Java Python C++");
System.out.println(st.nextToken()); // Java

// 기존 공백 대신 ","를 새로운 구분자로 사용
System.out.println(st.nextToken(",")); // Python C++

📌 기존 구분자를 무시하고 새로운 구분자로 토큰을 분리할 수 있음

 

✅ 4) hasMoreElements() → hasMoreTokens()와 동일 (boolean 반환)

StringTokenizer st = new StringTokenizer("Java Kotlin Swift");
while (st.hasMoreElements()) {
    System.out.println(st.nextElement());
}

📌 Enumeration 인터페이스를 구현하여 hasMoreTokens()와 동일한 기능 수행

 

✅ 5) nextElement() → nextToken()과 동일 (Object 반환)

StringTokenizer st = new StringTokenizer("Hello World");
System.out.println(st.nextElement()); // Hello
System.out.println(st.nextElement()); // World

📌 nextToken()과 같지만 반환 타입이 Object

 

✅ 6) countTokens() → 남은 토큰 개수 반환 (int)

StringTokenizer st = new StringTokenizer("One Two Three");
System.out.println(st.countTokens()); // 3
System.out.println(st.nextToken());   // One
System.out.println(st.countTokens()); // 2

📌 nextToken()을 호출할 때마다 감소

 

✅ 3. returnDelims 옵션 (구분자 포함 여부)

StringTokenizer st1 = new StringTokenizer("Java,Python,C++", ",");
while (st1.hasMoreTokens()) {
    System.out.println(st1.nextToken()); 
}

📌 기본적으로 ,는 토큰으로 취급되지 않음

 

출력:

Java
Python
C++

 

StringTokenizer st2 = new StringTokenizer("Java,Python,C++", ",", true);
while (st2.hasMoreTokens()) {
    System.out.println(st2.nextToken());
}

📌 true를 추가하면 구분자도 토큰으로 포함됨

출력:

Java
,
Python
,
C++

 

✅ 4. String.split()과 차이점

기능 StringTokenizer String.split()
성능 빠름 (메모리 효율적) 상대적으로 느림
구분자 포함 여부 가능 (returnDelims) 불가능
재사용 불가능 (1회용) 가능 (배열 재사용 가능)
입력 타입 String String
반환 타입 StringTokenizer (Iterator 방식) String[] (배열)

 

📌 권장 사용법

빠른 실행이 필요하면 StringTokenizer

배열이 필요하거나 가변적인 구분자가 있는 경우 String.split()

 

✅ 5. 전체 예제

import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) {
        String str = "Java,Python,C++,Go";

        // 쉼표(,)를 구분자로 설정
        StringTokenizer st = new StringTokenizer(str, ",");

        // 남은 토큰 개수 출력
        System.out.println("총 토큰 개수: " + st.countTokens());

        // 모든 토큰 출력
        while (st.hasMoreTokens()) {
            System.out.println(st.nextToken());
        }
    }
}

 

출력:

총 토큰 개수: 4
Java
Python
C++
Go

 

✅ 6. 결론

StringTokenizer구분자로 문자열을 쉽게 분리하는 데 유용

hasMoreTokens(), nextToken(), countTokens() 등 다양한 메서드 제공

split()보다 빠르고 가벼움, 하지만 한 번만 사용할 수 있음

공백, 쉼표, 세미콜론 같은 다양한 구분자를 활용할 때 적합

 

 

 

 

출처 : ChatGPT

'BE > Java' 카테고리의 다른 글

[Java] File I/O  (0) 2025.03.18
[Java] BufferedReader  (0) 2025.03.17
[Java] 네이버 포매터(Naver Formatter)  (0) 2025.03.11
[Java] 롬복과 어노테이션 프로세서  (1) 2025.03.08
[Java] Java Collections Framework  (0) 2025.03.06