문자 클래스 \p{javaWhitespace}는 공백(whitespace) 문자와 일치하는 Java 전용 정규식 패턴입니다. 어떤 문자가 이 패턴과 일치하려면, 그 문자를 java.lang.Character 클래스의 isWhitespace() 메서드에 인수로 전달했을 때 true가 반환되어야 합니다. 즉, 스페이스·탭·줄바꿈 등 자바에서 공백으로 간주되는 모든 문자를 하나의 패턴으로 처리할 수 있습니다.
예제 1: 문자열에서 공백 문자 개수 세기
다음 예제는 사용자로부터 문자열을 입력받아, 정규식 \p{javaWhitespace}를 적용해 문자열 안에 포함된 공백 문자의 총개수를 구하는 프로그램입니다.
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
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{javaWhitespace}]";
// 정규 표현식 컴파일
Pattern pattern = Pattern.compile(regex);
// Matcher 객체 생성
Matcher matcher = pattern.matcher(input);
int count = 0;
while(matcher.find()) {
count++;
}
System.out.println("Number of whitespace characters: " + count);
}
}
실행 결과
Enter a string hello welcome to tutorialspoint Number of whitespace characters: 3
"hello welcome to tutorialspoint"라는 문장에는 단어 사이의 공백이 정확히 3개 있으므로, 위 프로그램은 3을 출력합니다.
예제 2: 공백 문자로만 구성된 문자열 찾기
이번에는 앵커(^, $)와 수량자(+)를 함께 사용하여, 입력된 문자열 전체가 공백 문자로만 이루어져 있는지 검사하는 예제입니다.
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{javaWhitespace}+$";
// 입력 데이터 받기
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 only whitespace characters: ");
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: Raju RAMU rahman SUnDar* Strings with only whitespace characters:
위 실행 결과에서 네 번째 입력값처럼 공백 문자로만 이루어진 문자열만 정규식 조건을 통과하여 출력됩니다. 나머지 문자열에는 일반 문자가 포함되어 있어 매칭에 실패합니다.
핵심 정리
\p{javaWhitespace}는Character.isWhitespace()가 true를 반환하는 모든 문자와 매칭됩니다.[\\p{javaWhitespace}]형태로 문자 클래스 안에서도 사용할 수 있습니다.^\\p{javaWhitespace}+$처럼 앵커와 결합하면 "문자열 전체가 공백으로만 구성되어 있는지" 검사할 수 있습니다.