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

자바(Java) 정규식 POSIX 문자 클래스 \p{Sc} – 통화 기호 매칭 완벽 가이드

정규식에서 \p{Sc}통화 기호(Currency Symbol)를 매칭하는 POSIX 문자 클래스입니다. 여기서 Sc는 유니코드 범주 중 '기호(Symbol)', 그중에서도 '통화(currency)'에 해당하며, 달러($), 유로(€), 파운드(£), 엔(¥) 같은 통화 기호와 일치합니다.

이 글에서는 자바의 PatternMatcher 클래스를 활용해 \p{Sc}를 사용하는 두 가지 예제를 살펴보겠습니다.

예제 1: 문자열에서 통화 기호 개수 세기

다음 예제는 사용자로부터 문자열을 입력받아, 해당 문자열에 포함된 통화 기호의 개수를 세는 프로그램입니다.

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

public class Example1 {
    public static void main(String args[]) {
        // 사용자로부터 문자열 입력받기
        System.out.println("문자열을 입력하세요");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();

        // 정규식 정의
        String regex = "\\p{Sc}";

        // 정규식 컴파일
        Pattern pattern = Pattern.compile(regex);

        // Matcher 객체 생성
        Matcher matcher = pattern.matcher(input);

        int count = 0;
        while(matcher.find()) {
            count++;
        }
        System.out.println("통화 기호의 개수: " + count);
    }
}

실행 결과

문자열을 입력하세요
euro €, pounds £, dollar $, yen ¥
통화 기호의 개수: 4

입력된 문자열에는 €, £, $, ¥ 네 개의 통화 기호가 포함되어 있으므로 결과값은 4가 출력됩니다.

예제 2: 통화 기호를 포함한 문자열 필터링

다음 예제는 여러 개의 문자열을 입력받아, 그중 통화 기호를 하나라도 포함하고 있는 문자열만 골라내는 프로그램입니다.

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

public class Example2 {
    public static void main(String args[]) {
        // 통화 기호를 포함하는 문자열을 찾는 정규식
        String regex = "^.*\\p{Sc}.*$";

        // 입력 데이터 받기
        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개의 문자열을 입력하세요:
hello
sample
243test
# #$$@
£shelling
통화 기호를 포함한 문자열:
# #$$@
£shelling

위 실행 결과에서 볼 수 있듯이, # #$$@는 달러 기호($)를 포함하고 있고, £shelling은 파운드 기호(£)를 포함하고 있어 두 문자열만 출력되었습니다.

정리

  • \p{Sc}는 유니코드 통화 기호 범주에 속하는 모든 문자와 일치합니다.
  • 대표적인 통화 기호로는 $, €, £, ¥ 등이 있습니다.
  • Pattern.compile()로 정규식을 컴파일한 후, Matcher 객체의 find() 또는 matches() 메서드를 사용해 매칭을 수행할 수 있습니다.