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

Java 정규식 POSIX 문자 클래스 \p{Blank} – 탭과 공백 문자 매칭 방법

POSIX 문자 클래스 \p{Blank}란?

Java 정규식에서 \p{Blank}는 탭(tab) 또는 공백(space) 문자에 해당하는 모든 문자와 일치하는 POSIX 문자 클래스입니다. 이 클래스를 활용하면 문자열 내에 포함된 공백 문자를 쉽게 찾거나 개수를 세고, 특정 조건에 맞는 문자열을 필터링할 수 있습니다.

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

다음 예제는 사용자로부터 문자열을 입력받아 \p{Blank} 정규식으로 문자열 안에 포함된 공백 문자(탭 또는 스페이스)의 개수를 출력합니다.

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PrintableCharacters {
    public static void main(String args[]) {
        // 사용자로부터 문자열 입력받기
        System.out.println("문자열을 입력하세요");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        // 정규식 정의
        String regex = "[\\p{Blank}]";
        // 정규식 컴파일
        Pattern pattern = Pattern.compile(regex);
        // Matcher 객체 생성
        Matcher matcher = pattern.matcher(input);
        int count = 0;
        while(matcher.find()) {
            count++;
        }
        System.out.println("공백 문자 개수: " + count);
    }
}

실행 결과:

문자열을 입력하세요
space tab test
공백 문자 개수: 2

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

예제 2: 공백 문자가 포함된 문자열 필터링

다음 예제는 여러 개의 문자열 중에서 \p{Blank} 패턴과 일치하는, 즉 공백 문자를 하나 이상 포함하는 문자열만 골라 출력합니다.

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{Blank}.*$";
        // 입력 데이터 받기
        Scanner sc = new Scanner(System.in);
        System.out.println("5개의 문자열을 입력하세요: ");
        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("공백 문자가 포함된 문자열: ");
        for(int i=0; i<5;i++) {
            // Matcher 객체 생성
            Matcher m = p.matcher(input[i]);
            if(m.matches()) {
                System.out.println(m.group());
            }
        }
    }
}

실행 결과:

5개의 문자열을 입력하세요:
sample data
hello
welcome to tutorialspoint
12345
ab bc cd da
공백 문자가 포함된 문자열:
sample data
welcome to tutorialspoint
ab bc cd da

실행 결과를 보면 "hello"와 "12345"는 공백 문자를 포함하지 않기 때문에 출력되지 않은 것을 확인할 수 있습니다.

\p{Blank}와 \s의 차이점

\p{Blank}는 오직 탭(\t)과 공백 문자만 매칭하는 반면, \s는 줄바꿈(\n), 캐리지 리턴(\r), 폼 피드(\f) 등 모든 종류의 공백 문자를 매칭합니다. 따라서 탭과 스페이스만 정확하게 대상으로 삼고 싶다면 \p{Blank}를 사용하는 것이 적합합니다.