자바에서 문자열을 특정 구분 기준에 따라 나누고 싶다면 split() 메서드를 활용하면 됩니다. String 클래스의 split() 메서드는 정규 표현식(regular expression)을 인수로 받아 현재 입력된 텍스트를 여러 개의 토큰(token)으로 분리하고, 그 결과를 String[] 배열 형태로 반환합니다.
1. String 클래스의 split() 메서드 사용 예제
아래 예제는 숫자(\d)를 구분 기준으로 삼아 입력 문자열을 분할하는 코드입니다.
import java.util.Scanner;
public class Example {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter input text: ");
String input = sc.nextLine();
String[] strArray = input.split("\\d");
for (int i = 0; i < strArray.length; i++) {
System.out.println(strArray[i]);
}
}
}실행 결과
Enter input text: 1Ramu 2Raju 3Radha 4Rahman 5Rachel Ramu Raju Radha Rahman Rachel
위 실행 결과에서 볼 수 있듯이, 각 이름 앞의 숫자가 정규 표현식 \\d(숫자 한 자리)와 일치하여 해당 위치를 기준으로 문자열이 잘려 나뉘게 됩니다.
2. java.util.regex 패키지의 Pattern 클래스 활용하기
정규 표현식 관련 작업을 더 명시적으로 처리하고 싶다면 java.util.regex 패키지의 Pattern 클래스를 사용할 수 있습니다. 이 클래스의 split() 메서드는 문자열을 인수로 받아 내부적으로 컴파일된 정규 표현식 패턴을 기준으로 텍스트를 분할하고, 역시 String[] 배열로 결과를 반환합니다.
Pattern 클래스 사용 예제
import java.util.Scanner;
import java.util.regex.Pattern;
public class SplittingString {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter input text: ");
String input = sc.nextLine();
String regex = "\\d";
// Pattern 객체 생성
Pattern pattern = Pattern.compile(regex);
String[] strArray = pattern.split(input);
for (int i = 0; i < strArray.length; i++) {
System.out.println(strArray[i]);
}
}
}실행 결과
Enter input text: 1Ramu 2Raju 3Radha 4Rahman 5Rachel Ramu Raju Radha Rahman Rachel
두 방식의 차이점
- String.split(): 간단하게 바로 호출할 수 있어 편리하지만, 동일한 정규 표현식을 반복해서 사용할 경우 매번 패턴을 다시 컴파일해야 합니다.
- Pattern.split():
Pattern.compile()로 패턴 객체를 미리 생성해 두면 재사용이 가능하므로, 같은 정규 표현식으로 여러 문자열을 분할할 때 성능 면에서 유리합니다.
두 방법 모두 동일한 결과를 반환하지만, 반복적인 분할 작업이 많은 프로그램이라면 Pattern 클래스를 미리 컴파일해 재사용하는 것이 더 효율적입니다.