본문 바로가기

Java

[박혜웅] JAVA String.split() vs StringTokenizer

String[] java.lang.String.split(String regex)
java.util.StringTokenizer.StringTokenizer(String str, String delim)

우선 위의 Method Summary에서 알 수 있듯이 delimiter가 split() 은 정규식을, StringTokenizer는 일반 문자열을 지원한다.

하지만 이 외에도 delimiter에 의해서 생성된 각 token들이 null 일 경우에 대한 처리가 다르다.
split()은 null token 을 빈문자열로 변환하여 배열에 저장하지만, 배열의 뒷부분에 null token은 배열에 저장하지 않는다.
StringTokenizer는 모든 null token에 대하여, 무시하고 건너 뛴다.

StringSplitTest.java

실행결과
''
''
'a'
'b'
'c'
''
'd'

'a'
'b'
'c'
'd'



그리고 성능에도 차이가 있는데, 아마도 split()은 정규식을 지원하기 때문에 성능이 안 좋은 것 같다.
가급적 대용량 파일이나 데이타를 처리할 때에는 StringTokenizer는 쓰는 것이 좋을 것이다.
Windows 7 64 bit 에서 돌린 결과는 아래와 같고, split()이 약 10배 느리다.

StringSplitBenchmarkTest.java

실행결과
StringTokenizer: 0 hours  0 mins  0 secs  35 milisecs
String.split() : 0 hours  0 mins  0 secs 297 milisecs