ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] StringTokenizer
    JAVA 2020. 10. 28. 00:19
    반응형

    백준 알고리즘 문제를 보다보면 5 3 과 같이 공백이 있는 입력을 많이 보게 된다.

    Scanner를 사용하면 간단하게 nextInt로 받아 변수에다 넣어주면 되지만, BufferedReader를 사용하게 될 경우 한 라인마다 입력을 받기에 한번에 입력을 받아서 나눠줘야 한다.

    그래서 난 보통 String 메소드인 split를 사용하여 배열을 만들어 주었는데 다른 사람들 풀이를 보니 StringTokenizer를 사용하는 경우가 많았다. 

    쓸데없이 배열 만드는 것보다 훨씬 좋아보였기에 StringTokenizer에 대해 알아보기로 하였다.

     

     


     

     

    StringTokenizer

     

    java.util 패키지 내에 있는 클래스로 String을 특정한 구분 문자(Delimiter)로 여러 개의 토큰(Token) 문자열로 나누어주는 기능을 가지고 있습니다. 이 때, 구분 문자로는 특수 문자, 공백 그리고 한 문자부터 여러 문자의 문자열로도 사용이 가능합니다. 또한 StringTokenizer 클래스는 Enumeration 인터페이스로 이용하였기 때문에, 나눠진 문자열은 열거형태로 존재합니다.

     

     

     

     

    StringTokenizer 생성자

     

    생성자 설명
    StringTokenizer(String str) 구분 문자를 파라미터로 받지 않는 생성자.
    이 때 디폴트 구분 문자로 공백을 가집니다.
    StringTokenizer(String str, String delim) 구분 문자를 인자로 받는 생성자.
    구분 문자는 2자리 이상도 설정이 가능합니다. 2자 이상의 구분 문자를 받는 경우, 구분 문자는 길이가 1로 고정이고 여러 개의 구분 문자로 설정됩니다.
    StringTokenizer(String str, String delim, boolean returnDelims) returnDelims가 true이면 구분 문자도 token으로 간주하여 리턴합니다.

     

     

     

     

    StringTokenizer 주요 메소드

     

    메소드 기능
    (int) countTokens() 남은 token의 갯수를 리턴합니다.
    (String) nextToken() 다음 token을 리턴합니다. 이전 token은 제거합니다.
    (String) nextToken(String delim) 구분 문자를 delim으로 변경한 후, 다음 token을 리턴합니다.
    (boolean) hasMoreTokens() 리턴할 다음 token이 있으면 true, 없으면 false를 리턴합니다.

     

     

     

     

    예시

     

     

    public static void main(String[] args) {
    
            String str1 = "oh coding diary";
            String str2 = "oh&&coding&#diary";
            String str3 = "oh&#coding#&diary";
            StringTokenizer st;
    
            st = new StringTokenizer(str1); //구분문자가 없을때, 공백으로 나눈다.
            while (st.hasMoreTokens()) {
                System.out.println("남은 토큰 수: " + st.countTokens());
                System.out.println("문자열: "+st.nextToken());
            }
            
            //출력값
    //        남은 토큰 수: 3
    //        문자열: oh
    //        남은 토큰 수: 2
    //        문자열: coding
    //        남은 토큰 수: 1
    //        문자열: diary
    
            st = new StringTokenizer(str2,"&"); //구분문자가 1개
            while (st.hasMoreTokens()) {
                System.out.println("문자열: "+st.nextToken());
            }
            
            //출력값
    //        문자열: oh
    //        문자열: coding
    //        문자열: #diary
    
            st = new StringTokenizer(str3, "&#"); //구분문자가 2개
            while (st.hasMoreTokens()) {
                System.out.println("문자열: "+st.nextToken());
            }
            
            //출력값
    //        문자열: oh
    //        문자열: coding
    //        문자열: diary
    
            st = new StringTokenizer(str3, "&#", true); //returnDelims가 true일 경우 
            while (st.hasMoreTokens()) {
                System.out.println("문자열: "+st.nextToken());
            }
            
            //출력값
    //        문자열: oh
    //        문자열: &
    //        문자열: #
    //        문자열: coding
    //        문자열: #
    //        문자열: &
    //        문자열: diary
     }

     

     

     

     

    References

     

    - https://arer.tistory.com/48

    - https://www.devkuma.com/books/pages/81

     

    728x90

    'JAVA' 카테고리의 다른 글

    [Study] 자바 1주차 과제  (0) 2020.11.17
    [JAVA] 제네릭(Generic) 이란?  (0) 2020.11.15
    클래스, 객체, 인스턴스  (0) 2020.09.21
    자바의 메모리 구조  (0) 2020.09.18
    자바 설치 및 환경변수 설정  (0) 2020.09.01

    댓글

Designed by Tistory.