Java에서 문자열을 특정 구분자를 기준으로 나누는 방법은 여러 가지가 있다.
그중 대표적인 방법이 StringTokenizer와 split() 메서드인데 이 두 방법은 기능적으로 유사하지만, 내부 동작 방식과 지원 기능이 다르므로 적절한 상황에 맞춰 선택해야 된다. 오늘은 StringTokenizer와 split()의 차이점을 비교하고, 어떤 상황에서 각각을 사용하는 것이 좋은지 알아보자.
StringTokenizer란?
StringTokenizer는 java.util 패키지에 포함된 클래스로, 문자열을 특정 구분자를 기준으로 분리하는 기능을 제공한다.
사용법 및 예제 코드
import java.util.StringTokenizer;
public class StringTokenizerExample {
public static void main(String[] args) {
String str = "Java,Python,C++,JavaScript";
StringTokenizer tokenizer = new StringTokenizer(str, ",");
while (tokenizer.hasMoreTokens()) {
System.out.println(tokenizer.nextToken());
}
}
}
출력 결과:
Java
Python
C++
JavaScript
주요 특징
- 구분자를 여러 개 설정 가능 (" ,.-" 등으로 설정하면 여러 개의 구분자를 적용 가능)
- 정규식 미지원 → 단순한 구분자로만 분리 가능
- 구분자를 유지할 수 없음 → 구분자가 포함된 원본 문자열을 보존할 수 없음
- Iterator-like 동작 → while 문을 사용하여 하나씩 토큰을 꺼내는 방식
(while 문을 사용하여 하나씩 토큰을 꺼내는 방식으로, 원통 안에서 먼저 넣은 것을 먼저 꺼내는 FIFO 방식과 유사하지만, 데이터를 저장하지 않는다는 점에서 차이가 있음.)
split()이란?
split()은 String 클래스에서 제공하는 메서드로, 정규 표현식을 활용하여 문자열을 분리할 수 있다.
사용법 및 예제 코드
public class SplitExample {
public static void main(String[] args) {
String str = "Java,Python,C++,JavaScript";
String[] tokens = str.split(",");
for (String token : tokens) {
System.out.println(token);
}
}
}
출력 결과:
Java
Python
C++
JavaScript
주요 특징
- 정규식 지원 → 복잡한 구분자도 사용 가능
- 배열 반환 → StringTokenizer와 달리 모든 토큰을 한 번에 저장할 수 있음
- 구분자를 유지할 수 없음 → 필요할 경우 정규식을 활용해야 함
- Null 또는 빈 문자열 포함 가능 → 구분자 사이의 빈 문자열도 포함될 수 있음
차이점
항목 StringTokenizer split()
정규식 지원 | 불가능 | 가능 |
반환 형식 | 개별 토큰을 하나씩 반환 | 문자열 배열 반환 |
성능 | 대체로 빠름 (단순 구분자 분리) | 상대적으로 느림 (정규식 처리 필요) |
빈 문자열 포함 | 포함하지 않음 | 포함 가능 |
사용 방식 | while 루프 사용 | 배열 반복문 사용 |
어떤 경우에 사용해야 할까?
상황 추천 방법
단순한 구분자로 문자열을 분리하고 싶을 때 | StringTokenizer |
정규식을 활용해 복잡한 구분 패턴을 적용하고 싶을 때 | split() |
빠르게 한 번만 순회하며 값을 추출할 때 | StringTokenizer |
모든 토큰을 배열로 저장하고 활용하고 싶을 때 | split() |
결론
StringTokenizer와 split()은 문자열을 나누는 유용한 도구이지만, 각각의 특성과 장단점이 있습니다.
- 빠르고 간단한 문자열 분리가 필요하다면 StringTokenizer
- 정규식을 활용한 복잡한 분리가 필요하다면 split()
'개발일기 > CS(면접)' 카테고리의 다른 글
Comparator를 활용한 문자열 정렬: 오름차순, 내림차순, 길이순 정렬까지 (0) | 2025.02.02 |
---|---|
브루트 포스 (Brute Force) 알고리즘이란? (0) | 2025.01.24 |
Scanner 차이 BufferedReader (0) | 2024.12.18 |
자료구조 정리 (0) | 2024.10.19 |
Junit5, Mockito 사용하기 (0) | 2024.09.30 |