알고리즘 문제를 풀면서 가장 많이 사용되었던 것이 무엇이냐고 물어보면 문자열을 쪼개서 활용하는 문제들이 많았다고 말할 수 있을 거 같다. 상황에 따라서 선택할 수 있도록 String의 split()과 StringTokenizer을 사용하여 문자열을 자르는 예제를 작성해보려고 한다.

 

일단 split()과 StringTokenizer 둘다 문자열을 특정 구분자(delimiter)을 기준으로 쪼갤 수 있는 기능을 가지고 있다. 사실 이번 글을 정리하게된 계기도 평소에 문자열을 자를 때는 항상 split()을 사용했다. 하지만, 최근데 입력을 받을 때 사용하는 BufferedReader를 사용하며 StringTokenizer에도 관심을 갖게 되었다.

 

첫 번째로 살펴볼 예제는 "가,나,다,라,마,바,사"를 구분자(,)를 기준으로 잘라서 "가 나 다 라 마 바 사"를 출력하게 하는 예제를 살펴볼 것이다.

 

split()을 이용하기

public class splitEx {
    public static void main(String[] args) {
        String str = "가,나,다,라,마,바,사";

        String[] splitStr = str.split(",");

        for (String s : splitStr) {
            System.out.print(s + " ");
        }
    }
}
출력
가 나 다 라 마 바 사 

split()의 경우에는 String 클래스의 메서드이기 때문에 별도로 import 해줘야 하는 것은 없다. 간단하게 나눌 수 있다.

 

StringTokenizer을 이용하기

import java.util.StringTokenizer;

public class StringTokenizerEx {
    public static void main(String[] args) {
        String str = "가,나,다,라,마,바,사";

        StringTokenizer tokenizer = new StringTokenizer(str, ",");

        while (tokenizer.hasMoreTokens()) {
            System.out.print(tokenizer.nextToken() + " ");
        }
    }
}
출력
가 나 다 라 마 바 사 

split()과는 상당히 유사한 형태를 띄고있긴 하다. StringTokenizer의 경우 java.util 패키지 안에 있기 때문에 import를 해주고 사용해야 한다. 

 

StringTokenizer의 생성자에 대해서 한번 알아보자.

 

위 코드에서는 두 번째 파라미터가 2개인 생성자를 사용해서 만든 StringTokenizer입니다. 설정 구분자인 ","를 기준으로 문자를 나눌 수 있었습니다. 이번에는 StringTokenizer의 메서드를 한번 살펴보겠습니다.

 

int countTokens()

현재 남아있는 Token의 개수를 반환합니다. 전체 Token 개수가 아니고 남은 Token의 개수입니다.

 

boolean hasMoreTokens()

StringTokenizer 객체에서 읽어올 수 있는 다음 토큰이 존재하면 true를 반환합니다.

 

String nextToken()

StringTokenizer 객체에서 다음 토큰을 갖와서 반환합니다. 이때 반환되는 타입은 String 타입입니다.

 

위에 3개가 StringTokenizer을 사용하여 문자열을 나눌 때, 자주 사용되는 메서드입니다. 별로 많지 않아서 쉽게 익히고 사용할 수 있습니다. 

 

 

이번에는 split()을 유용하게 사용할 수 있는 한 가지 예를 하나 사용해보고 마무리를 하겠습니다.

 

"가a나b다c라d마e바f사g"라는 문자열이 있을 때, "가 나 다 라 마 바 사"의 출력을 얻고 싶다면 어떻게 해야할까요.

 

문자열을 charAt()을 통해서 하나 하나 확인하면서 a, b, c, d, e, f, g에 해당하는 문자열을 빼고, 나머지만 찾아내는 방법을 써도 해결을 할 수 있을 거 같습니다. 이때 split()의 기능을 사용하면 간단하게 문자열을 구분할 수 있습니다.

 

구분자가 a, b, c, d, e, f, g 여러개인데 어떻게 나누냐는 생각을 할 수도 있습니다. 이때 split()에는 "|" 를 가지고 구분하면 여러 가지 구분자를 같이 사용할 수 있습니다. 코드로 한번 살펴보겠습니다.

 

여러가지 구분자를 사용하는 split()

package practice;

public class splitEx {
    public static void main(String[] args) {
        String str = "가a나b다c라d마e바f사g";

        String[] splitStr = str.split("a|b|c|d|e|f|g");

        for (String s : splitStr) {
            System.out.print(s + " ");
        }
    }
}
출력
가 나 다 라 마 바 사 

split()을 사용해서 "|"로 구분해서 여러가지 구분자를 사용하면 위와 같은 결과를 쉽게 얻을 수 있습니다. 아는 만큼 사용할 수 있는 것이 많아지기 때문에 많은 것을 일단 보고, 사용해보는 것이 좋다고 생각합니다.

+ Recent posts