티스토리 뷰

JAVA

StringTokenizer

PeonyF 2020. 1. 3. 03:55
반응형

 

StringTokenizer란?

긴 문자열을 지정된 구분자(delimiter)를 기준으로 토큰(Token)이라는 여러 개의 문자열로 잘라내는 데 사용된다.

StringTokenizer의 경우 구분자로 단 하나의 문자 밖에 사용 할 수 없는 단점이 있다.

StringTokenizer 객체를 생성할 때 첫 번째 파라미터로 전체 문자열을 주고, 두 번째 파라미터로 구분자를 주면 된다.

만약 구분자가 생략되면 구분자는 기본적으로 공백(space)가 된다.

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


 

 

public class StringTokenizer implements Enumeration<Object> { .. .}

 

StringTokenizer 주요 메소드

메소드 설명
StringTokenizer(String str, String delim) 문자열(str)을 지정된 구분자(delim)로 나누는 StringTokenizer를 생성한다.(구분자는 토큰으로 간주되지 않음)
StringTokenizer(String str, String delim, boolean returnDelims) 문자열(str)을 지정된 구분자(delim)로 나누는 StringTokenizer를 생성한다. returnDelims의 값을 true로 하면 구분자도 토큰으로 간주.
int countTokens() 분리한 전체 토큰의 개수 반환
boolean hasMoreTokens() 토큰이 존재하면 True 리턴
String nextToken() 다음 토큰을 반환 (The next token from this string tokenizer)

 

알고리즘에 자주 쓰이는 예제

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());

// AB CDD EFFF GH 입력

st.nextToken() // AB
st.nextToken() // CDD
st.nextToken() // EFFF
st.nextToken() // GH
  • java readline, nextLine(한줄 바로 입력받음)
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer tokenizer;

        int countLocation = Integer.parseInt(br.readLine());
        SortLocation[] sortLocations = new SortLocation[countLocation];

        for (int i = 0; i < countLocation; i++) {
            tokenizer = new StringTokenizer(br.readLine()); 
            int x = Integer.parseInt(tokenizer.nextToken());
            int y = Integer.parseInt(tokenizer.nextToken());
            sortLocations[i] = new SortLocation(x, y);
        }
  • 입력받은 한줄을 띄어쓰기로 구분하여 x와 y에 해당 값을 입력받는다.

 

예제

알고리즘 문제를 풀때, 입력이 몇개인지 주어지지 않는 경우 입력을 EOF(End Of File)까지 처리한다. eof를 사용함으로서 데이터가 없음을 알려줄 수 있다.java에서는 while(sc.hasNextInt())를 사용함으로서 EOF 까지 입력을 받을 수 있음.(입력이 끝날때까지).  

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


 

     100,200,300 => 콤마로 구분  

     가나 다라 마바 사아 => 띄어쓰기로 구분

     +-*/=() => 각각의 문자 모두 구분자로 구분

 

 

 

 

 

 

 

 

 

 

 

 

 

Q. BufferReader의 Split와 StringTokenizer의 차이는?

Q. Enumeration 이란?

Q. StringTokenizer에서 객체를 꺼낼 경우 Data가 사라지는 원리는?

 

출처: https://palpit.tistory.com/879 [palpit Vlog], Java의 정석,https://wkimdev.github.io/,https://cuddlyciel.tistory.com/

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함