1. 차이점
split은 JDK 1.4에서부터, StringTokenizer는 JDK 1.0에서부터 추가되었다,
split은 delemeter로 나눈 문자열이 빈문자열이면 빈 문자열을 출력하지만, StringTokenizer는 빈 문자열은 없앤다. 마지막 항목은 둘다 빈 문자열일 경우 리턴시 없애는데 이를 포함시킬 경우 split에 limit 인자를 추가한다.
- 분해 방식
split은 내부적으로 정규표현식으로 분해하고 StringTokenizer는 문자열 하나하나를 분해한 다. split의 delemeter가 ^, *,| 등의 문자열일 경우 "\\" delemeter앞에 추가해주어야 한다.
2. 성능
- 아래의 샘플의 결과
split : 1121092
StringTokenizer : 423797
- 일반적인 성능 측정 결과 :
Sun에서는 StringTokenizer을 이용하는 것보다 String 클래스에 포함되어 있는 split() 기능을 이용하거나 Scanner와 같은 다른 정규식 기반 솔루션을 이용하는 것이 좋다고 권고하는데, 실제 결과는 StringTokenizer가 성능이 좋다. 환경에 맞게 선택하길 바란다.
3. 테스트 샘플 코드
package client;
import java.util.StringTokenizer;
public class SplitTest {
private static final String
DELIM = "|";
private static void
useStringTokenizer(String input)
{
StringTokenizer st = new
StringTokenizer(input, DELIM);
while (st.hasMoreElements()) {
String
token = st.nextElement().toString();
System.out.println("Split
= " + token);
}
}
private static void useSplit(String
input)
{
String[] splitStr =
input.split("\\|", 10);
int splitLength =
splitStr.length;
for(int i = 0; i <
splitLength; i++) {
System.out.println("Split : " + splitStr[i]);
}
//System.out.println(Arrays.asList(fields));
}
public static void main(String[]
args) {
String input =
"1|2|3||5|||8||";
long start1 = System.nanoTime();
useStringTokenizer(input);
System.out.println(System.nanoTime() - start1);
long start2 = System.nanoTime();;
useSplit(input);
System.out.println(System.nanoTime() - start2);
}
}
4. 테스트 결과
Split = 1
Split = 2
Split = 3
Split = 5
Split = 8
StringTokenizer = 423797
Split : 1
Split : 2
Split : 3
Split :
Split : 5
Split :
Split :
Split : 8
Split :
Split :
Split = 1121092
'Java' 카테고리의 다른 글
아규먼트(argument) 와 파라미터(parameter) 의 차이 (0) | 2013.10.17 |
---|---|
Java에서 Linux Shell 명령어 실행하기 (0) | 2013.08.26 |
Java에서 SSH를 통해 리눅스 서버에 명령을 전달하는 코드 (1) | 2013.08.26 |
이클립스에서 다중 스레드 관리하기 (0) | 2013.08.22 |
[Struts2] 취약점 관련 Struts 2.3.15.1로 라이브러리 변경 (0) | 2013.07.24 |