JAVA

[Java] StringTokenizer 사용법, split()과의 차이

번잔중 2022. 9. 25. 18:50

StringTokenizer

알고리즘 문제를 풀다보면 한 줄에 입력을 받은 내용을 나눠서 저장해줘야 하는 경우가 생긴다. 문자열을 하나씩 나눠야 할지, 공백을 기준으로 나눌지 혹은 콤마(,)를 기준으로 나누는지에 따라 다를 것이다.

 

이 기준을 정할 수 있도록 하는 것이 구분자인데 자주 쓰는 구분자는

  • 문자열을 하나씩 나눌 때("")
  • 공백(" ")
  • 특수문자("," 또는 ".")

등이 있다. 이러한 구분자들을 이용하게 되면 보통의 경우는 아래처럼 split()을 사용할 것이다.

String str = "Happy Day!";
String[] strArr = str.split(" ");

[Happy, Day!]

 

물론 split() 메서드를 사용하는 것도 좋다. 하지만 StringTokenizer와의 차이를 구분하여 사용할 수 있다면 더 좋을 것이다. 이 둘 사이의 차이는 공백 문자열을 포함 여부이다.

split()과 StringTokenizer의 차이

split()

입력된 문자열을 구분자를 기준으로 공백 문자열을 포함한다.
String str = "You,are,my,mission,";
String[] strArr = str.split(",");

// 출력 결과
[You, are, my, mission, ]

구분자가 콤마이기 때문에 콤마를 기준으로 잘라서 배열에 저장한다. 그렇기 때문에 위와 같은 형태로 구분자 이후에 공백문자열을 담는다.

 

StringTonkenizer

입력된 문자열을 구분자를 기준으로 잘라서 토큰으로 저장한다. 공백문자열은 무시한다.
String str = "You,are,my,mission,";
StringTokenizer st = new StringTokenizer(str, ",");

// 출력 결과
[You, are, my, mission]

위와 같이 공백문자열은 무시하고 값이 존재하는 경우만 토큰에 저장된다.

 

문자열을 입력받아서 구분자를 기준으로 잘라서 배열이나 리스트, 스택 등과 같은 자료구조에 저장해야 할 때 사용한다. 개인적으로는 BufferedReader로 입력을 받고 공백문자열을 고려하지 않는 경우에 사용한다.

 

이름에서 알 수 있듯이 String(문자열) + Tonkenizer(토큰화 해줌) = 문자열을 여러 조각의 토큰으로 분리해주는 클래스이다.

이제 사용법을 알아보자!

StringTokenizer 사용법

StringTokenizer는 클래스이므로 import문을 사용하여 import java.util.stringtokenizer로 가져와야 사용할 수 있다. 

세 가지 방식이 있는데, 

  1. default(공백으로 분리)
  2. 구분자로 분리
  3. 구분자로 분리하고, 구분자를 내용에 포함할지 여부(true이면 구분자 포함, false이면 구분자 포함 ❌)

말보다는 코드로 확인해보자

import java.util.StringTokenizer

// 1. default
String str = "You are my mission"
StringTokenizer st = new StringTokenizer(str);

// 2. 구분자로 분리
String str = "You are my mission"
StringTokenizer st = new StringTokenizer(str, " ");

// 3. 구분자의 포함 여부
String str = "You are my mission"
StringTokenizer st = new StringTokenizer(str, " ", true/false);

StringTokenizer의 메서드

메서드 설명
boolean hasMoreTokens() 남은 토큰이 있으면 true, 없으면 false
boolean hasMoreElements() hasMoreTokens와 같은 기능이다. 열거형 인터페이스를 구현
String nextToken() 객체에서 다음 문자열인 토큰을 반환
String nextToken(String delim - 구분자) 객체에서 구분자를 기준으로 다음 토큰을 반환
Object nextElement() nextToken() 메서드와 같은 기능이지만 객체를 반환
int countTokens() 토큰의 개수를 반환

 


알고리즘 문제를 풀 때에는 hasMoreTokens(), nextToken()을 주로 사용하고 가~끔 countTokens()도 사용합니다. 만약 내부의 값이 자주 변해야하고 공백문자열 또한 포함해야 하는 경우라면 split()을 사용합니다!

 

읽어주셔서 감사합니다.