Java에서는 java.util.regex 패키지의 Pattern 클래스와 Matcher 클래스를 활용하면 문자열에 포함된 숫자를 간단하게 추출할 수 있습니다.
주어진 문자열에서 숫자를 찾으려면 다음 두 가지 정규식 중 하나를 사용하면 됩니다.
"\\d+" 또는 "([0-9]+)"
- \\d+ — 숫자(digit)가 하나 이상 연속으로 나타나는 패턴을 의미합니다.
- [0-9]+ — 0부터 9 사이의 문자가 하나 이상 연속되는 패턴으로, \\d+와 동일한 결과를 반환합니다.
예제 1 — Scanner로 입력받은 문자열에서 숫자 추출하기
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ExtractingDigits {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("샘플 텍스트를 입력하세요: ");
String data = sc.nextLine();
// 문자열에서 숫자를 찾기 위한 정규식
String regex = "\\d+";
// Pattern 객체 생성
Pattern pattern = Pattern.compile(regex);
// Matcher 객체 생성
Matcher matcher = pattern.matcher(data);
System.out.println("문자열에서 발견된 숫자: ");
while(matcher.find()) {
System.out.print(matcher.group()+" ");
}
}
}실행 결과
샘플 텍스트를 입력하세요: this is a sample 23 text 46 with 11223 numbers in it 문자열에서 발견된 숫자: 23 46 11223
예제 2 — 고정된 문자열에서 숫자 추출하기
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Just {
public static void main(String[] args) {
String data = "abc12def334hjdsk7438dbds3y388";
// 숫자를 찾기 위한 정규식
String regex = "([0-9]+)";
// Pattern 객체 생성
Pattern pattern = Pattern.compile(regex);
// Matcher 객체 생성
Matcher matcher = pattern.matcher(data);
System.out.println("문자열에서 발견된 숫자: ");
while(matcher.find()) {
System.out.print(matcher.group()+" ");
}
}
}실행 결과
문자열에서 발견된 숫자: 12 334 7438 3 388
동작 원리 정리
- Pattern.compile(regex) — 정규식을 컴파일하여
Pattern객체를 생성합니다. - pattern.matcher(data) — 대상 문자열에 대해 매칭을 수행할
Matcher객체를 생성합니다. - matcher.find() — 문자열에서 정규식과 일치하는 다음 부분을 차례대로 탐색하며, 일치하는 부분이 있으면 true를 반환합니다.
- matcher.group() — 현재 일치(match)된 실제 문자열을 반환합니다.
이처럼 while 반복문과 find(), group() 메서드를 조합하면 문자열 내 모든 숫자를 순서대로 추출할 수 있습니다. 사용자 입력을 처리하든, 이미 정의된 문자열을 처리하든 동일한 방식으로 적용할 수 있습니다.