문자열을 입력 받을 때 공백이 포함된 상태로 여러개의 입력을 받는 경우가 있다.
대표적으로 BufferedReader를 이용하여 입력받을 때는 줄 단위로 입력을 받기 때문에 여러 문자들을 나열한 문자열을 입력받는다면 이를 분리해주는 작업이 필요하다.
이 때 사용할 수 있는 split() 메소드와 StringTokenizer 클래스에 대해 알아보자
split()
기본 사용법
String a = br.readLine(); // 입력 문자열
String[] ary1 = a.split(" "); // 공백 기준으로 문자열 분리
String[] ary2 = a.split(" ", 3); // 공백 기준으로 문자열 분리, 3개까지만 자름
split 함수의 첫번째 인자로는 정규식이 들어갈 수 있고, 빈 문자열도 하나의 문자열로 취급한다.
특수문자를 기준으로 분리하기 위해서는 이스케이프 문자를 이용하면 된다.
String[] ary1 = a.split("\\\\"); // \(역슬래시) 기준으로 분리
구분자를 여러개 두고 싶을 때는 | 기호를 이용해 여러 개의 구분자를 설정할 수 있다.
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에서 지원하는 메소드는 다음과 같다.
StringTokenizer도 split처럼 구분자를 여러개 받을 수 있는데 그 사용법은 다음과 같다.
StringTokenizer st = new StringTokenizer(br.readLine(), "!-.\\"); // StringTokenizer생성
while (st.hasMoreTokens()) { // 다음 토큰이 있다면
System.out.println("[" + st.nextToken() + "]");
}
split때와는 달리 여러개의 구분자를 이어붙여서 사용해도 무방하다.
'Java > 개념정리' 카테고리의 다른 글
[Java] HashSet 에 대해 알아보자 (78) | 2023.10.30 |
---|---|
[Java] 배열 정렬하기 (Arrays.sort(), Collections.reverseOrder() 사용) (39) | 2023.10.30 |
[Java] Scanner 와 BufferedReader 차이점 (0) | 2023.10.16 |
Java 용어 정리 (0) | 2020.12.15 |