본문 바로가기
프로그래밍/Java

[Java] StringTokenizer에 대해 알아보자~

by KHRDev 2022. 8. 9.

자바를 더 자바답게...

자바를 자바답게 사용하려면 어떻게 해야할까? 라는 내용에는 StringTokenizer의 내용이 포함되는 경우가 있다.

 

🤔 StringTokenizer란 뭘까?


StringTokenizer 클래스는 Java에서 제공하는 클래스로 특정 문자열을 구분자를 지정해 분리할 때 사용되는 클래스다. 

 

보통 개발을 하게 되면 String[] strArr = String.split("{구분자}"); 같은 형태로 사용하는 경우가 더 많겠지만 특정한 상황에서는 

StringTokenizer가 좀 더 유용할 수 있을 것이라고 생각한다..

 

StringTokenizer는 지정한 구분자를 이용해 문자들을 Token 단위로 쪼개게 된다.

내부를 들여다보면 StringTokenizer는 Enumeration 인터페이스의 구현체임을 확인할 수 있다. 

 

사용해보자...


StringTokenizer 객체를 생성할 때 Arguments로 String, delim(구분자), returnDelims(구분자도 토큰으로 포함할 것인가?)를 활용해 생성하게 된다.

사실 사용할 수 있는 메소드는 많지 않기 때문에 returnDelims가 true인 경우와 false인 경우만 간단하게 예제 코드를 작성해보도록 하자..


1. returnDelims가 false인 경우 -> 구분자를 토큰으로 포함하지 않겠다.

StringTokenizerExample 클래스 

StringTokenizerExampleTest 클래스

위의 테스트 코드를 실행해보자..

 

※ 결과

- 라는 구분자를 이용해 전화번호를 Token 단위로 나누었고 010(첫 토큰), 1234(두 번째 토큰), 5678(세 번째 토큰)으로 자바 Collection의 iterator과 같이 다음 값(토큰)이 존재한다면 해당 값(토큰)을 꺼내오는 식으로 진행이 된다.


2. returnDelims가 true인 경우 -> 구분자 또한 토큰으로 포함하겠다.

StringTokenizerExample 클래스는 동일하다..

위의 테스트 코드를 실행해보자..

 

※결과

returnDelims를 true로 설정하자 구분자인 - 또한 토큰으로 포함되는 것을 확인할 수 있다.

 


String.split() vs StringTokenizer

위에 언급한 바와 같이 Java에서 문자열을 분리하는 방법에는 split과 StringTokenizer가 존재한다.

둘의 차이점을 알아야 특정 상황에서 좀 더 효율적인 코드 작성이 가능하기에 훌륭한 비교글을 인용해본다.

출처 : https://www.geeksforgeeks.org/difference-between-stringtokenizer-and-split-method-in-java/

 

Difference Between StringTokenizer and Split Method in Java - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

아무래도 가장 큰 차이점은 구분자에 정규표현식을 사용할 수 있느냐 없느냐 인 것 같다. 

StringTokenizer는 구분자에 정규표현식을 사용할 수 없지만 split 메소드에 비해 성능이 두 배가량 빠르다고 명시되어 있다.


Collection의 iterator와 참 비슷한 것 같다. 

String을 특정 구분자를 통해 나눈 후 순서대로 분리된 문자를 사용하게 될 경우, 성능상의 이점을 취하기 위해 StringTokenizer를 고려해보자.

 

'프로그래밍 > Java' 카테고리의 다른 글

ModelMapper란?  (0) 2023.07.12
String vs (StringBuffer vs StringBuilder)  (0) 2022.06.07
Java에서 문자열 앞뒤 공백 제거  (0) 2022.05.31
Java로 Client IP 찾는 방법  (0) 2022.05.23
++i vs i++  (0) 2022.05.18

댓글