Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 정규 표현식(java.util.regex)을 활용한 텍스트 분할 방법

자바에서 문자열을 특정 구분 기준에 따라 나누고 싶다면 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 클래스를 미리 컴파일해 재사용하는 것이 더 효율적입니다.