Java에서 정규식(Regular Expression)을 활용하면 문자열 내의 숫자를 손쉽게 찾거나 검증할 수 있습니다. 숫자와 일치시키는 대표적인 방법은 메타 문자 \d를 사용하거나, 아래와 같은 문자 클래스 표현식을 사용하는 것입니다.
[0-9]
두 표현식은 기능적으로 동일하며, 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("문자열을 입력하세요");
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("숫자 개수: " + count);
}
}실행 결과
문자열을 입력하세요 sample text 1234 6657 숫자 개수: 8
이 코드의 핵심 흐름은 다음과 같습니다.
- Pattern.compile() : 정규식 문자열을 컴파일하여 Pattern 객체를 생성합니다.
- pattern.matcher() : 입력 문자열에 대해 Matcher 객체를 얻습니다.
- matcher.find() : 매칭되는 숫자를 하나씩 찾아가며 카운트를 증가시킵니다.
예제 2: 특정 자릿수 검증하기
정규식은 단순히 숫자를 찾는 것뿐만 아니라, 입력값이 원하는 형식(예: 10자리 숫자)에 맞는지 검증하는 데도 유용합니다. 수량자 {n}을 사용하면 정확히 n자리 숫자인지 확인할 수 있습니다.
import java.util.Scanner;
public class RegexExample {
public static void main( String args[] ) {
// 10자리 숫자를 허용하는 정규식
String regex = "\\d{10}";
System.out.println("값을 입력하세요: ");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
boolean result = input.matches(regex);
if(result) {
System.out.println("10자리 숫자입니다.");
} else {
System.out.println("잘못된 입력입니다.");
}
}
}실행 결과 1
값을 입력하세요: 9848022558 10자리 숫자입니다.
실행 결과 2
값을 입력하세요: 5337 잘못된 입력입니다.
정리
Java 정규식으로 숫자를 다룰 때 기억해야 할 핵심 포인트는 다음과 같습니다.
- \d 또는 [0-9] : 숫자 한 자리와 매칭
- \d{10} : 정확히 10자리 숫자와 매칭
- matches() : 문자열 전체가 패턴과 일치하는지 검사
- find() : 문자열 내에서 패턴과 일치하는 부분을 순차적으로 탐색
전화번호, 주민등록번호, 우편번호 등 형식이 정해진 숫자 데이터를 검증할 때 이러한 정규식 패턴을 응용하면 코드를 간결하고 안정적으로 작성할 수 있습니다.