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 |
결과가 엄청 잘 나온다. 그렇다면 저번에 고생했던 공백이 여러개 들어가는 경우를 해보자.
엄청 잘된다.
오늘의 교훈: 공부를 하자.
'건승하고있어요 > Java' 카테고리의 다른 글
[Collection] 스택(Stack, LIFO) 과 큐(Queue, FIFO) (0) | 2018.02.03 |
---|---|
[Collection] List컬렉션 - ArrayList, LinkedList (0) | 2018.02.03 |
Collection Framework 컬렉션 프레임워크 (0) | 2018.02.03 |
[입출력]StringBuilder 클래스 (0) | 2018.02.02 |
for문/ 최대값 구하기, shift하기 (0) | 2018.01.30 |