Java/개념정리

[Java] 문자열 분리 (split, StringTokenizer 사용법)

Sehyeok20 2023. 10. 27. 10:03
반응형

문자열을 입력 받을 때 공백이 포함된 상태로 여러개의 입력을 받는 경우가 있다.

대표적으로 BufferedReader를 이용하여 입력받을 때는 줄 단위로 입력을 받기 때문에 여러 문자들을 나열한 문자열을 입력받는다면 이를 분리해주는 작업이 필요하다.

 

이 때 사용할 수 있는 split() 메소드와 StringTokenizer 클래스에 대해 알아보자

 

split()

 

기본 사용법

String a = br.readLine();		// 입력 문자열
String[] ary1 = a.split(" ");		// 공백 기준으로 문자열 분리
String[] ary2 = a.split(" ", 3);	// 공백 기준으로 문자열 분리, 3개까지만 자름

ary1, ar2 출력결과

 

split 함수의 첫번째 인자로는 정규식이 들어갈 수 있고, 빈 문자열도 하나의 문자열로 취급한다.

특수문자를 기준으로 분리하기 위해서는 이스케이프 문자를 이용하면 된다.

String[] ary1 = a.split("\\\\"); // \(역슬래시) 기준으로 분리

역슬래시는 4개를 이용해야 한다.

 

구분자를 여러개 두고 싶을 때는 | 기호를 이용해 여러 개의 구분자를 설정할 수 있다.

String[] ary1 = a.split(" |@|\\."); // 공백과 @와 .(콤마)를 기준으로 분리

결과

또한 for문을 이용하지 않고, split함수 뒤에 인덱스를 붙여 결과를 바로 출력할 수도 있다.

System.out.println(a.split(" |@|\\.")[0]);	// 0번째 인자 출력
System.out.println(a.split(" |@|\\.")[1]);	// 1번째 인자 출력
System.out.println(a.split(" |@|\\.")[2]);	// 2번째 인자 출력

 

결과

split 함수의 두번째 인자로는 limit이 들어가는데 이것의 기본값은 0이다.

즉 0을 넣었을 때와 아무것도 넣지 않을 때의 결과값이 같다.

 

String a = br.readLine();
String[] ary1 = a.split(" ", 0);
String[] ary2 = a.split(" ");

출력결과

split 함수의 매개변수 limit에 들어가는 값 만큼의 배열이 반환된다.(3이라면 길이가 3인 배열 반환)

String a = br.readLine();
String[] ary1 = a.split(" ", 3);
String[] ary2 = a.split(" ", 5);

출력결과

해당 구분자를 기준으로 배열을 자르고, 배열의 길이가 limit에 할당된 수만큼 나눠졌다면, 이후의 문자열은 무시한 채로 반환한다.

 

 

StringTokenizer

 

split과의 차이점

  • split과의 가장 큰 차이점은 split은 String클래스에 속해있는 메소드이고 StringTokenizer는 java.util에 포함되어 있는 클래스이다.
  • split는 정규표현식으로 구분하고 StringTokenizer는 문자로 구분한다.
  • split는 빈문자열을 토큰으로 인식하는 반면 StringTokenizer는 빈 문자열을 토큰으로 인식하지 않는다.
  • split는 결과 값이 문자열 배열이지만, Stringtokenizer는 문자열이다. (반복문으로 이어서 반환)

기본 사용법

StringTokenizer st = new StringTokenizer(문자열, 구분자, true/false);

첫번째 인자로는 자를 문자열이 들어가고,

두번째 인자로는 구분자가 들어간다. 기본값은 공백

StringTokenizer st = new StringTokenizer(br.readLine(), "!"); // StringTokenizer생성
while (st.hasMoreTokens()) { // 다음 토큰이 있다면
    System.out.println("[" + st.nextToken() + "]");
}

예시

세번째 인자로는 true 또는 false가 들어가는데, 이것은 구분자를 나눈 토큰에 포함시키는지 여부이다. 마찬가지로 기본값은 false

StringTokenizer st = new StringTokenizer(br.readLine(), " ", true); // StringTokenizer생성
while (st.hasMoreTokens()) { // 다음 토큰이 있다면
    System.out.println("[" + st.nextToken() + "]");
}

예시

StringTokenizer에서 지원하는 메소드는 다음과 같다.

출처 : https://jhnyang.tistory.com/

 

StringTokenizer도 split처럼 구분자를 여러개 받을 수 있는데 그 사용법은 다음과 같다.

StringTokenizer st = new StringTokenizer(br.readLine(), "!-.\\"); // StringTokenizer생성
while (st.hasMoreTokens()) { // 다음 토큰이 있다면
    System.out.println("[" + st.nextToken() + "]");
}

예시

split때와는 달리 여러개의 구분자를 이어붙여서 사용해도 무방하다.

반응형