Java/문자열

[Java]StringTokenizer 클래스 사용 방법

DevStory 2022. 9. 8.

StringTokenizer 클래스

java.util 패키지에 존재하는 StringTokenizer 클래스는 문자열을 특정 구분 기호를 기준으로 분할하며, 분할된 문자열을 토큰(Token)이라고 말합니다.


StringTokenizer 생성자

StringTokenizer 클래스는 세 가지 형태의 생성자 함수를 가지고 있습니다.


생성자 1. StringTokenizer(String str)

첫 번째 생성자 함수는 매개변수로 전달받은 문자열에 대해 문자열 토큰을 생성합니다. 문자열을 구분하는 기호는 탭(\t), 줄 바꿈(\n), 캐리지 리턴(\r), 폼 피드(\f)입니다.

public StringTokenizer(String str);

 

다음 예제는 StringTokenizer 클래스의 첫 번째 생성자 함수에 문자열을 전달하여 생성된 문자열 토큰을 출력합니다.

public static void main(String args[]) {
  StringTokenizer stringTokenizer = 
          new StringTokenizer("Hello Java !\nnew World");

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

[실행 결과]

Hello
Java
!
new
World

생성자 2. StringTokenizer(String str, String delim)

두 번째 생성자 함수는 구분 문자열을 전달할 수 있습니다.

public StringTokenizer(String str, String delim);

 

다음 예제는 StringTokenizer 클래스의 두 번째 생성자 함수에 구분 문자열 콤마(",")를 전달하여 생성된 문자열 토큰을 출력합니다.

public static void main(String args[]) {
  StringTokenizer stringTokenizer =
          new StringTokenizer("Hello,Java!,new,World", ",");

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

[실행 결과]

Hello
Java!
new
World

 

다음 예제는 StringTokenizer 클래스의 두 번째 생성자 함수에 구분 문자열 "Hello"를 전달합니다.

public static void main(String args[]) {
  StringTokenizer stringTokenizer =
          new StringTokenizer("Hello Java! Hello React!, Hello C#!", "Hello");

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

[실행 결과]

 Java! 
 R
act!, 
 C#!

실행 결과를 보면, 예상했던 결과와 다른 것을 확인할 수 있습니다. 구분 문자열 "Hello"를 전달하면, "Hello"를 기준으로 문자열을 분할하는 것이 아니라 "H", "e", "l", "o"를 기준으로 분할합니다.

 

위 예제가 어렵다면, 다음 예제를 봅시다. 다음 예제는 StringTokenizer 클래스의 두 번째 생성자 함수에 구분 문자열 "_a"를 전달합니다.

public static void main(String args[]) {
  StringTokenizer stringTokenizer =
          new StringTokenizer("Apple_Banana_Watermelon!", "_a");

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

[실행 결과]

Apple
B
n
n
W
termelon!

구분 문자열 "_a"를 두 번째 매개변수에 전달했으므로 문자열 "_", "a"를 기준으로 문자열을 분할합니다. 


생성자 3. StringTokenizer(String str, String delim, boolean returnDelims)

세 번째 생성자 함수를 사용하여 구분자를 토큰에 포함할 것인지 포함하지 않을 것인지 설정할 수 있습니다.

public StringTokenizer(String str, String delim, boolean returnDelims);

 

다음 예제는 구분 문자열 "_"를 전달하고 구분자를 토큰에 포함하지 않으므로 세 번째 매개변수에 false를 전달합니다.

public static void main(String args[]) {
  StringTokenizer stringTokenizer =
          new StringTokenizer("Apple_Banana_Watermelon!", "_", false);

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

[실행 결과]

Apple
Banana
Watermelon!

 

다음 예제는 구분 문자열 "_"를 전달하고 구분자를 토큰에 포함할 것이므로 세 번째 매개변수에 true를 전달합니다.

public static void main(String args[]) {
  StringTokenizer stringTokenizer =
          new StringTokenizer("Apple_Banana_Watermelon!", "_", true);

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

[실행 결과]

Apple
_
Banana
_
Watermelon!

메서드

StringTokenizer 클래스는 다음 여섯 개의 메서드를 가지고 있습니다.

 

boolean hasMoreTokens()

- 토큰이 존재하면 true, 그렇지 않으면 false를 반환합니다.

 

boolean hasMoreElements()

- 내부적으로 hasMoreTokens() 메서드를 호출하므로 동작 방식, 반환 결과는 hasMoreTokens() 메서드와 동일합니다.

 

int countTokens()

- 토큰의 개수를 반환합니다.

 

String nextToken()

- 사용 가능한 다음 토큰을 문자열로 반환합니다.

 

String nextToken(String delim)

- 매개변수로 전달받은 구분 기호를 기준으로 분할된 다음 토큰을 문자열로 반환합니다.

 

Object nextElement()

- 내부적으로 nextToken() 메서드를 호출하지만, 반환 타입이 Object라는 차이점이 있습니다.


토큰의 총 개수 및 존재 여부

다음 예제는 토큰의 총 개수와 존재 여부를 출력합니다.

public static void main(String args[]) {
  StringTokenizer stringTokenizer1 =
          new StringTokenizer("Apple_Banana_Watermelon!", "_");

  System.out.println("stringTokenizer1 토큰의 총 개수: " + stringTokenizer1.countTokens());
  System.out.println("stringTokenizer1 토큰 존재 여부: " + stringTokenizer1.hasMoreElements());
  System.out.println("stringTokenizer1 토큰 존재 여부: " + stringTokenizer1.hasMoreTokens() + "\n");

  StringTokenizer stringTokenizer2 =
          new StringTokenizer("", ",");

  System.out.println("stringTokenizer2 토큰의 총 개수: " + stringTokenizer2.countTokens());
  System.out.println("stringTokenizer2 토큰 존재 여부: " + stringTokenizer2.hasMoreElements());
  System.out.println("stringTokenizer2 토큰 존재 여부: " + stringTokenizer2.hasMoreTokens());
}

[실행 결과]

stringTokenizer1 토큰의 총 개수: 3
stringTokenizer1 토큰 존재 여부: true
stringTokenizer1 토큰 존재 여부: true

stringTokenizer2 토큰의 총 개수: 0
stringTokenizer2 토큰 존재 여부: false
stringTokenizer2 토큰 존재 여부: false
반응형

댓글