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

Java 정규식 POSIX 문자 클래스 \p{Space} 완벽 정리

Java 정규식에서 POSIX 문자 클래스 \p{Space}는 공백(whitespace) 문자와 일치하는 패턴입니다. 여기에 해당하는 문자는 탭(\t), 줄바꿈(\n), 세로 탭(\x0B), 폼 피드(\f), 캐리지 리턴(\r) 그리고 일반 공백(' ')입니다.

문자열 내의 공백을 찾거나 개수를 세거나, 공백이 포함된 문자열을 필터링할 때 매우 유용하게 사용됩니다.

예제 1: 문자열에서 공백 문자 개수 세기

아래 예제는 사용자로부터 문자열을 입력받은 후, 정규식 [\\p{Space}]를 사용해 공백 문자가 몇 번 나타나는지 세어 출력합니다.

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SpaceCharacters {
    public static void main(String args[]) {
        // 사용자로부터 문자열 입력받기
        System.out.println("Enter a string");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        // 정규식 정의
        String regex = "[\\p{Space}]";
        // 정규식 컴파일
        Pattern pattern = Pattern.compile(regex);
        // Matcher 객체 생성
        Matcher matcher = pattern.matcher(input);
        int count = 0;
        while(matcher.find()) {
            count++;
        }
        System.out.println("Number of space characters: "+count);
    }
}

실행 결과

Enter a string
space tab test
Number of space characters: 2

입력한 문자열 "space tab test"에는 단어 사이에 공백이 두 개 있으므로 결과로 2가 출력됩니다.

예제 2: 공백을 포함한 문자열 필터링하기

다음 예제는 정규식 ^.*\\p{Space}.*$를 사용하여, 입력받은 여러 문자열 중 공백을 하나라도 포함하고 있는 문자열만 골라내어 출력합니다.

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
    public static void main( String args[] ) {
        // 공백이 포함된 문자열을 찾는 정규식
        String regex = "^.*\\p{Space}.*$";
        // 입력 데이터 받기
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter 5 input strings: ");
        String input[] = new String[5];
        for (int i=0; i<5; i++) {
            input[i] = sc.nextLine();
        }
        // Pattern 객체 생성
        Pattern p = Pattern.compile(regex);
        System.out.println("Strings with spaces: ");
        for(int i=0; i<5;i++) {
            // Matcher 객체 생성
            Matcher m = p.matcher(input[i]);
            if(m.matches()) {
                System.out.println(m.group());
            }
        }
    }
}

실행 결과

Enter 5 input strings:
sample data
hello
welcome to tutorialspoint
12345
ab bc cd da
Strings with spaces:
sample data
welcome to tutorialspoint
ab bc cd da

결과를 보면 "hello"와 "12345"처럼 공백이 없는 문자열은 제외되고, 공백을 포함한 세 개의 문자열만 출력된 것을 확인할 수 있습니다.

정리

  • \\p{Space}는 탭, 줄바꿈, 공백 등 모든 종류의 공백 문자와 일치합니다.
  • 단일 문자 검사에는 [\\p{Space}], 전체 문자열 검사에는 ^.*\\p{Space}.*$ 형태로 활용할 수 있습니다.
  • PatternMatcher 클래스를 함께 사용하면 문자열 검색, 개수 세기, 필터링 등 다양한 작업을 손쉽게 처리할 수 있습니다.