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

Java 정규식(RegEx)으로 숫자가 아닌 문자를 매칭하는 방법

Java 정규식에서 숫자가 아닌 문자(non-digit)를 찾으려면 메타 문자 "\D"를 사용하면 됩니다. \D는 숫자(0~9)를 제외한 모든 문자와 일치하며, 이를 활용하면 문자열에서 숫자가 아닌 문자의 개수를 세거나, 입력값이 특정 조건에 맞는지 검증할 수 있습니다.

예제 1: 숫자가 아닌 문자 개수 세기

다음 예제는 사용자로부터 문자열을 입력받아, 그 안에 포함된 숫자가 아닌 문자의 개수를 세는 프로그램입니다.

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("Enter a String");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        String regex = "\\D";
        // 정규식 컴파일
        Pattern pattern = Pattern.compile(regex);
        // Matcher 객체 생성
        Matcher matcher = pattern.matcher(input);
        int count = 0;
        while(matcher.find()) {
            count++;
        }
        System.out.println("Number non-digit characters: "+count);
    }
}

실행 결과

Enter a String
sample text 2425 36
Number non-digit characters: 13

위 실행 결과를 보면 입력 문자열 "sample text 2425 36"에는 공백과 알파벳 등 총 13개의 숫자가 아닌 문자가 포함되어 있습니다.

예제 2: 입력값 유효성 검사

이번 예제는 입력값이 숫자가 아닌 문자로만 구성된 10자리 문자열인지 확인하는 프로그램입니다. 정규식 "\D{10}"은 숫자가 아닌 문자가 정확히 10번 연속으로 나오는 경우에만 일치합니다.

import java.util.Scanner;
public class RegexExample {
    public static void main( String args[] ) {
        // 숫자가 아닌 문자 10개로만 구성된 입력값을 허용하는 정규식
        String regex = "\\D{10}";
        System.out.println("Enter input value: ");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        boolean result = input.matches(regex);
        if(result) {
            System.out.println("input matched");
        }
        else {
            System.out.println("wrong input");
        }
    }
}

실행 결과 1

Enter input value:
sample abc
input matched

실행 결과 2

Enter input value:
sample1234
wrong input

첫 번째 실행 결과에서는 입력값 "sample abc"가 모두 숫자가 아닌 문자로 구성되어 있어 "input matched"가 출력됩니다. 반면 두 번째 결과에서는 "sample1234"에 숫자가 포함되어 있어 "wrong input"이 출력됩니다.

정리

\D 메타 문자는 \d(숫자와 일치)의 반대 개념으로, 숫자가 아닌 모든 문자와 일치합니다. {n} 수량자와 함께 사용하면 특정 길이의 비숫자 문자열 여부도 손쉽게 검사할 수 있으므로, 입력값 검증이나 데이터 필터링 작업에 유용하게 활용할 수 있습니다.