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로 가져와야 사용할 수 있다.
세 가지 방식이 있는데,
- default(공백으로 분리)
- 구분자로 분리
- 구분자로 분리하고, 구분자를 내용에 포함할지 여부(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()을 사용합니다!
읽어주셔서 감사합니다.
'JAVA' 카테고리의 다른 글
[Java] 순열과 조합, 중복순열과 중복조합까지(재귀) (0) | 2022.10.23 |
---|---|
[Java] 소수 판별 함수(메소드) isPrime (0) | 2022.10.04 |
[Java] GCD 알고리즘(최대공약수) & LCM 알고리즘(최소공배수) (0) | 2022.10.03 |
[Java] 문자열 치환(공백, 특수문자) replace() 사용법 (0) | 2022.09.27 |
[Java] BufferedReader, BufferedWriter 사용법 (0) | 2022.09.24 |