✅ StringTokenizer의 모든 요소 (메서드 및 기능)
StringTokenizer는 Java에서 문자열을 특정 구분자로 분리하는 클래스입니다.
사용법이 간단하고 성능이 뛰어나며, 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 |