\p{Upper}는 Java 정규식에서 지원하는 POSIX 문자 클래스 중 하나로, 알파벳 대문자(A~Z)와 일치하는 패턴입니다. 이 클래스를 활용하면 문자열 전체가 대문자로만 구성되어 있는지 검사하거나, 문자열에 포함된 대문자의 개수를 손쉽게 계산할 수 있습니다.
예제 1: 대문자로만 이루어진 문자열 찾기
아래 예제는 정규식 ^\p{Upper}+$을 사용해 사용자가 입력한 5개의 문자열 중에서 오직 대문자로만 구성된 문자열을 골라냅니다.
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Posix_UpperExample {
public static void main(String args[]) {
// 대문자와 일치시키기 위한 정규식
String regex = "^\\p{Upper}+$";
// 입력 데이터 받기
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개의 문자열을 입력하세요: RAJU RAMU RamANi raghav# madhavi** 대문자로만 구성된 문자열: RAJU RAMU
패턴 양 끝의 ^(문자열 시작)와 $(문자열 끝) 앵커 덕분에, 문자열의 일부가 아니라 전체가 대문자일 때만 일치합니다. 따라서 소문자나 특수문자가 섞인 RamANi, raghav#, madhavi**는 모두 제외됩니다.
예제 2: 문자열 내 대문자 개수 세기
두 번째 예제는 \p{Upper} 패턴과 find() 메서드를 조합하여 입력 문자열에 포함된 대문자의 개수를 계산합니다.
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String args[]) {
// 사용자로부터 문자열 입력받기
System.out.println("문자열을 입력하세요");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
// 정규식 정의
String regex = "\\p{Upper}";
// 정규식 컴파일
Pattern pattern = Pattern.compile(regex);
// Matcher 객체 가져오기
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println("입력한 문자열 내 대문자 개수: " + count);
}
}
실행 결과 1
문자열을 입력하세요 Hello How Are You 입력한 문자열 내 대문자 개수: 4
Hello How Are You에는 H, H, A, Y로 총 4개의 대문자가 포함되어 있으며, 각 대문자가 하나씩 일치하여 4가 출력됩니다.
실행 결과 2
문자열을 입력하세요 WELCOME TO TUTORIALSPOINT 입력한 문자열 내 대문자 개수: 23
공백을 제외한 모든 문자가 대문자인 WELCOME TO TUTORIALSPOINT의 경우, 각 대문자가 하나씩 일치하여 총 23개가 카운트됩니다.