Language/Java

[Java] 문자열 분리를 위한 StringTokenizer

KAispread 2022. 7. 16. 00:56
728x90
반응형

자바는 문자열을 위한 다양한 클래스가 존재한다.
문자열을 이어 붙이기 위한  StringBuffer / StringBuilder 부터,
문자열 사이나 앞, 뒤에 구분자를 추가해주는 StringJoiner까지 그 종류는 다양하다.
그 중 java.util 의 StringTokenizer 클래스는 문자열을 토큰(token)의 형태로 나누어 처리 할 수 있도록 한다.


 

  StringTokenizer  

생성자

StringTokenizer의 생성자는 다음과 같이 3가지 종류가 있다.

  • StringTokenizer(String str)
    - 매개변수로 받은 문자열을 띄어쓰기 기준으로 분리.
  • StringTokenizer(String str, String delim)
    -  매개변수로 받은 문자열을 두번째 매개변수로 받은 문자를 기준으로 분리
  • StringTokenizer(String str, String delim, boolean returnDelims)
    -
    매개변수로 받은 문자열을 두번째 매개변수로 받은 문자로 분리
    (세번째 매개변수의 boolean값이 true이면 두번째 매개변수로 받은 문자도 토큰에 포함)

 

StringTokenizer 클래스는 문자열을 구분자를 기준으로 토큰으로 나눈다.

밑에서 설명하겠지만, hasMoreTokens() 메소드는 StringTokenizer 객체에 토큰이 남아있는지 확인하는 메소드이고,
nextToken()은 다음 토큰을 리턴받는 메소드라는 것을 알고 가도록 하자.

1. 지정된 문자열만을 매개변수로 넣어주면 띄어쓰기(공백)를 기준으로 문자열을 분리한다.

// 구분자는 띄어쓰기(공백)
StringTokenizer token = new StringTokenizer("사과 바나나 딸기");
      
while(token.hasMoreTokens()) {
   System.out.println(token.nextToken()); 
}
/* [출력] 
사과 
바나나 
딸기
*/

 

 

2. 두번째 생성자는 띄어쓰기가 아닌, 두번째 매개변수로 받은 문자를 기준으로 분리한다.

// 구분자를 ? 로 지정
StringTokenizer token = new StringTokenizer("사과,바나나,딸기", "?");
      
while(token.hasMoreTokens()) {
   System.out.println(token.nextToken()); 
}
/* [출력] 
사과 
바나나 
딸기
*/

이 때, 구분자를 여러개 설정하고 싶다면 다음과 같이 문자를 붙여서 넣어주면 된다. 

// 두 번째 생성자 - 구분자 여러개
StringTokenizer token = new StringTokenizer("사과!바나나?딸기", "!?");
// 두 번째 매개변수로 인해 !와 ?를 기준으로 문자열이 분리된다.
      
while(token.hasMoreTokens()) {
   System.out.println(token.nextToken()); 
}
/* [출력] 
사과 
바나나 
딸기
*/

 

 

3. 세 번째 매개변수로 true를 넣어주면 구분자도 토큰으로 분리된다.

// 구분자를 ? 로 지정하고 구분자도 토큰에 포함
StringTokenizer token = new StringTokenizer("사과?바나나?딸기", "?", true);
      
while(token.hasMoreTokens()) {
   System.out.println(token.nextToken()); 
}
/* [출력] 
사과
?
바나나 
?
딸기
*/

 

 

메소드

StringTokenzier에 정의된 메소드들은 다음과 같다.

리턴값 메소드 설명
int countTokens() 남아있는 토큰의 개수를 반환한다.
boolean hasMoreElements() 토큰이 더 남아있는지 확인한다. 
boolean hasMoreTokens() 토큰이 더 남아있는지 확인한다.
Object nextElements() 다음 토큰을 반환한다. (Object로 반환)
String nextToken() 다음 토큰을 반환한다. (String으로 반환)
String nextToken(String delim) 매개변수로 받은 구분자를 기준으로 반환한다. 객체의 구분자가 바뀌게되므로 주의

StringTokenizer 생성자를 통해 문자열을 여러개의 토큰으로 나누었다면,
nextToken() 메소드로 이 토큰들에 접근할 수 있다.
남아있는 토큰이 있는지 확인하는 방법은 hasMoreTokens()를 사용하면 된다.
(hasMoreElements() 라는 메소드도 같은 기능을 하지만 보통 Tokens를 더 많이 사용한다.)


자주 사용하는 메소드를 예제를 통해 확인해보자.

 

countTokens() 메소드 - 남아있는 토큰의 개수 반환

StringTokenizer token = new StringTokenizer("사과 바나나 딸기");

System.out.println(token.countTokens());
// 3
System.out.println(token.nextToken());
// 사과
System.out.println(token.countTokens());
// 2 - nextToken 메소드로 토큰을 하나 건너뛰었으므로 2가 출력된다.

 

 

hasMoreTokens() 메소드 - StringTokenizer 객체에 토큰이 남아있는지 boolean값으로 리턴

앞서 본 코드처럼, 이 메소드를 통해 객체에 저장된 모든 토큰들을 불러올 수 있다.

StringTokenizer token = new StringTokenizer("사과 바나나 딸기");
      
while(token.hasMoreTokens()) {
   System.out.println(token.nextToken()); 
}
/* [출력] 
사과 
바나나 
딸기
*/

 

 

728x90
반응형