본문 바로가기

건승하고있어요/Java

[입출력] StringTokenizer 클래스 / 자바 단어 자르기

반응형

StringTokenizer클래스

:문자열이 한 종류의 구분자로 연결되어 있을 경우 문자열(토큰token)을 분리해내기 위한 클래스


StringTokenizer st = new StringTokenizer("문자열", "구분자");

여기에서 구분자를 생략하면 공백(space)이 기본 구분자가 된다.


StringToknizer 클래스 메소드

 

 메소드

설명 

 int

countTokens() 

꺼내지 않고 남아있는 토큰의 수 

 boolean 

 hasMoreTokens()

남아있는 토큰이 있는지 여부 

 String 

 nextToken() 

토큰을 하나씩 꺼내옴 


예시)

String hola = "안녕,hi,hola,곤니찌와";


StringTokenizer st = new StringTokenizer(hola, ",");

while(st.hasMoreTokens()) { 

//while문으로 단어 개수만큼 돌리는거당. 이 경우에는 4번이 돎. (for문을 사용해도 오킹)

String token = st.nextToken(); //토큰을 하나씩 꺼내오는 중

System.out.println(token); //꺼내온 토큰 출력

}


결과


nextToken() 메소드로 토큰을 하나씩 꺼내오면 StringTokenizer객체에는 해당 토큰이 사라진다. 객체에서 더 이상 가져올 토큰이 없는 경우 java.util.NoSuchElementException 예외를 발생시킨다. 따라서 nextToken()메소드를 사용하기 전에 hasMoreTokens()메소드로 꺼내올 토큰이 있는지 조사한 후에 nextToken()메소드를 사용하는 것이 바람직하다. 


참고: 이것이자바다, 최백준강의


------------------------------------------------------------------------------------------------------------------


앞서 한 번 풀어봤던 문제를 쉽게 풀 수 있을 것 같다.

문제: 영어 대소문자와 띄어쓰기 만으로 이루어진 문장이 주어진다. 이 문장에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오.

(출처: https://www.acmicpc.net/problem/1152)

(내가 예전에 문제 푼 방식: http://cuddlyciel.tistory.com/27)


그 전에 문제를 풀 때는 String 메소드의 split()을 활용하였다. 배열로 단어가 나뉘기 때문에 배열의 갯수를 세서 답을 냈다.

공백이 연속으로 입력되는 경우에 대한 예외처리를 했었다. 암튼간 쇼를 했다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Scanner;
import java.util.StringTokenizer;
 
public class CountVoca {
    
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        
        String phrase = scan.nextLine();
        
        StringTokenizer st = new StringTokenizer(phrase, " ");
        int num = st.countTokens();
        System.out.println("단어의 개수: " + num);
        
        
        scan.close();
    }
 
}
 
cs

입력받는 문자들에 대한 예외처리는 우선 안 했다. 
StringTokenizer st = new StringTokenizer(phrase, " ");
        int num = st.countTokens();
단 두 줄로 끝이났다. ㅠ_ㅠ 아이고 모르면 몸이 고생한다더니 아이고 아이고 아이고

결과가 엄청 잘 나온다. 그렇다면 저번에 고생했던 공백이 여러개 들어가는 경우를 해보자.


엄청 잘된다.


오늘의 교훈: 공부를 하자.





반응형