1. java.util.StringTokenizer class
- 이 클래스는 긴 문자열을 지정된 구분자(delimiter)를 기준으로 토큰이라는 여러 개의 문자열로
잘라내는 데 사용된다.
- StringTokenizer는 구분자로 단 하나의 문자 밖에 사용하지 못하기 때문에 보다 복잡한 형태의 구분자로
문자열을 나누어야 할 때는 어쩔 수 없이 정규식 표현(Scanner 또는 split)를 사용해야 할 것이다.
- StringTokenizer 클래스의 생성자와 메서드는 아래와 같다.
(1) StringTokenizer(String str, String delim)
: str 문자열을 지정된 구분자 delim으로 나누는 StringTokenizer를 생성한다.
(2) StringTokenizer(String str, String delim, boolean returnDelims)
: returnDelims의 값을 true로 하면 구분자도 토큰으로 간주된다.
(3) int countTokens()
: 전체의 토큰의 수를 반환한다.
(4) boolean hasMoreTokens()
: 토큰이 남아있는지 알려준다.
(5) String nextToken()
: 다음 토큰을 반환한다.
1-1. StringTokenizer class를 이해하기 위한 예제(1)
: hasMoreTokens()와 nextToken()을 사용하는 예제이다.
1-2. StringTokenizer class를 이해하기 위한 예제(2)
: StringTokenizer의 생성자 boolean을 사용하는 예제이다.
( boolean 매개변수에게 인자값 true 주니, 구분자 또한 토큰이 되었다. )
1-3. StringTokenizer class를 이해하기 위한 예제(3)
: StringTokenizer를 2번 사용하는 예제이다.
1-4. StringTokenizer class를 이해하기 위한 예제(4)
: StringTokenizer를 이용하여 한글로 된 숫자를 아라비아 숫자로 바꾸는 예제이다.
public class Exercise001 {
public static void main(String[] args) throws FileNotFoundException{
String input = "삼천삼백삼십삼억삼천오백칠십오만오천오백오십오";
System.out.println("현재: " + input);
System.out.println(hangulToNum(input));
}
public static long hangulToNum(String input) {
long result = 0;
long tmpReuslt = 0;
long n = 0;
final String NUMBER = "영일이삼사오육칠팔구";
final String UNIT = "십백천만억조";
final long[] UNIT_NUM = {10,100,1000,10000,(long)1e8,(long)1e12};
StringTokenizer st = new StringTokenizer(input, UNIT, true);
while(st.hasMoreTokens()) {
String token = st.nextToken();
int check = NUMBER.indexOf(token);
if(check == -1) {
if("만억조".indexOf(token) == -1) {
tmpReuslt += (n==0 ? 1 : n) * UNIT_NUM[UNIT.indexOf(token)];
}else {
tmpReuslt += n;
result += (tmpReuslt==0 ? n : tmpReuslt+n) * UNIT_NUM[UNIT.indexOf(token)];
tmpReuslt=0;
}
n=0;
}else {
n = check;
}
}
result += tmpReuslt + n;
return result;
}
}
( 이러한 문제들은 종이에 쓰면서 순서도를 그린 후, 코드를 짠다면 매우 쉬울 것이다. )
1-5. StringTokenizer class를 이해하기 위한 예제(5)
: StringTokenizer과 split() 사용의 차이를 보여주는 예제이다.
( 출력 결과에서도 알 수 있듯이, split() 메서드는 빈 문자열까지 토큰으로 인식하는 반면 StringTokenizer는 빈 문자열을 인식하지 않는다. )
( 또한 split()은 배열을 반환하기 때문에 성능면에서는 StringTokenizer보다 떨어질 수밖에 없다. )
'자바 > 유용한 클래스들' 카테고리의 다른 글
유용한 클래스(7) - BigDecimal class (0) | 2021.12.31 |
---|---|
유용한 클래스(6) - BigInteger class (0) | 2021.12.31 |
유용한 클래스(4) - Scanner class (0) | 2021.12.30 |
유용한 클래스(3) - 정규식 - regex 패키지 (0) | 2021.12.29 |
유용한 클래스(2) - Random class (0) | 2021.12.29 |