[Java] StringTokenizer

최지수·2022년 4월 25일
0

Java

목록 보기
19/27
post-thumbnail

구분자를 기준으로 문자열을 나누는 StringTokenizer

긴 문자열을 지정된 구분자delimeter를 기준으로 토큰token이라는 여러 개의 문자열로 잘라내는데 사용되는 클래스에요. "100,200,300,400",로 잘ㄹ라 내면 "100", "200", "300", "400"이라는 4개의 문자열로 얻을 수 있어요.

StringTokenizer st = new StringTokenizer("100,200,300,400", ",");

// 이것도 되긴한데, 정규식 표현을 써야해서
// 익숙하지 않으면 StringTokenizer가 쓰기 편할거에요.
// String[] result = "100,200,300,400".split(",");
// Scanner sc = new Scanner("100,200,300,400").useDelimiter(",");

while(st.hasMoreTokens()){
	System.out.println(st.nextToken());
}

위 예제는 구분자는 무시하게 되는데, 생성자 StringTokenizer({문자열}, {구분자}, true /* 구분자 포함 */)을 사용하시면 구분자까지 결과물에 포함시킬 수 있어요. 또한, {구분자}의 경우, 하나만 사용할 수 있기 때문에 모든 문자열 전체가 하나의 구분자가 아닌 각각의 문자가 모두 구분자가 될 수 있어요.

String expression = "x=100*(200+300)/2";
StringTokenizer st = new StringTokenizer(expression, "=*(+)/", true);

while(st.hasMoreTokens()){
	System.out.println(st.nextToken());
}

마지막으로, String.split 함수와 비교해 볼게요. split은 빈 문자열도 토큰으로 인식하는 반면, StringTokenizer는 빈 문자열을 토큰으로 인식하지 않아요.

이 밖에도 성능적인 면에서 split은 데이터를 토큰으로 잘라낸 결과를 배열에 담아 반환하기 때문에, 데이터를 토큰으로 바로 잘라서 반환하는 StringTokenizer보다 성능이 떨어질 수 밖에 없어요. 데이터가 많은 경우라면 이를 고려해서 사용하시면 좋을 거에요.

String data = "100,,,200,300";
String[] result = data.split(",");
StringTokenizer st = new StringTokenizer(data, ",");

for(int i = 0 ; i < result.length; ++i){
    System.err.print(result[i] + "|");
}
// 5개
System.out.println("개수 : " + result.length);

int i = 0;
for(;st.hasMoreTokens(); ++i){
    System.out.print(st.nextToken() + "|");
}
// 3개
System.out.println("개수 : " + i);
profile
#행복 #도전 #지속성

0개의 댓글