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

정규식을 활용해 문자열에서 숫자를 추출하는 방법 (Java 예제)

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

동작 원리 정리

  1. Pattern.compile(regex) — 정규식을 컴파일하여 Pattern 객체를 생성합니다.
  2. pattern.matcher(data) — 대상 문자열에 대해 매칭을 수행할 Matcher 객체를 생성합니다.
  3. matcher.find() — 문자열에서 정규식과 일치하는 다음 부분을 차례대로 탐색하며, 일치하는 부분이 있으면 true를 반환합니다.
  4. matcher.group() — 현재 일치(match)된 실제 문자열을 반환합니다.

이처럼 while 반복문과 find(), group() 메서드를 조합하면 문자열 내 모든 숫자를 순서대로 추출할 수 있습니다. 사용자 입력을 처리하든, 이미 정의된 문자열을 처리하든 동일한 방식으로 적용할 수 있습니다.