2021-02-17
String의 Split과 달리 StringTokenizer는 문자열을 문자 자체로 구분하는데, 이를 토큰이라고 표현하기도 한다. 오늘은 이 StringTokenizer의 사용법을 알아보도록 하자.
- 선언
StringTokenizer st = new StringTokenizer(name, " ");
자바 API중 하나의 클래스이기 때문에 객체로 만들어서 사용해 주어야 한다. 또한 선언 시 2가지의 매개 값을 주어야 하는데 첫 번째는 토큰화 하고 싶은 스트링 객체이고, 두 번째는 이러한 문자 토큰을 구분 지어줄 delimiter를 넣어준다. 사용할 예제는 아래와 같이 규칙적인 여러 공백을 가지는 문자열로 아래와 같다.
String name = "aaa bbb ccc ddd fff";
- 문자열 나누기
while(st.hasMoreTokens()) {
// hasMoreTokens 해당 st에 더이상의 토큰이 있는지
// 체크하는 것이다.
int count = st.countTokens();
// -> 현재 남아있는 전체 토큰수를 체크할 수 있다.
System.out.println("남아 있는 토큰수는 -> " + count );
String nextSt = st.nextToken();
// nextToken은 말그대로 다음의 토큰을 가지고 온다.
// token을 꺼내면 해당 토큰을 없어진다.
System.out.println("추출한 토큰은 -> " + nextSt);
System.out.println();
}
보통 문자열을 토큰화해서 나눌 때는 loop를 사용해서 하나씩 꺼내 주는 방식을 사용하게 된다. 대표적으로는 for문보다는 while문을 많이 사용한다.
사용방법으로는 while문의 조건식에 현재 StringTokenizer객체에 남아있는 토큰이 있는지 체크하는 것 부터 시작된다. 이를 확인하는 메서드는 hasMoreTokens으로 현재 남아있는 토큰이 있는지 객체를 확인하게 되고, 남아있는 토큰이 있을 경우에는 계속해서 토큰을 꺼내오는 방식이다.
남아있는 현재 토큰이 몇개인지 궁금할 때는 countTokens을 이용해서 현재의 잔여 토큰의 개수를 확인할 수 있다. 토큰 자체를 꺼내기 위해서는 nextToken을 쓰면 되는데, String 변수에 담아주면 된다. 또한 nextToken을 쓰면 StringTokenizer 객체 내부에 nextToken으로 꺼낸 토큰이 제거되는 점도 알아두자. 출력결과를 확인하면 아래와 같다.
- 전체코드
package sStringTokenizer;
import java.util.StringTokenizer;
public class main {
public static void main(String[] args) {
//StringTokenizer 는 Spring의 split과는 달리 문자로 구분한다.
String name = "aaa bbb ccc ddd fff";
//보통 중간에 공백문자나 특수문자 제거에 많이쓴다.
StringTokenizer st = new StringTokenizer(name, " ");
//구분자 공백으로 나누어 각각 문자하나당 하나의 토큰을 가지는 StringTokenizer를 생성.
while(st.hasMoreTokens()) {
// hasMoreTokens 해당 st에 더이상의 토큰이 있는지
// 체크하는 것이다.
int count = st.countTokens();
// -> 현재 남아있는 전체 토큰수를 체크할 수 있다.
System.out.println("남아 있는 토큰수는 -> " + count );
String nextSt = st.nextToken();
// nextToken은 말그대로 다음의 토큰을 가지고 온다.
// token을 꺼내면 해당 토큰을 없어진다.
System.out.println("추출한 토큰은 -> " + nextSt);
System.out.println();
}
}
}