본문 바로가기
카테고리 없음

Java 정규 표현식: 숫자만 찾기

by softitscream 2025. 2. 6.
반응형

안녕하세요, 여러분! 오늘은 Java에서 정규 표현식을 사용하여 문자열에서 숫자만을 찾는 방법에 대해 알아보겠습니다. 정규 표현식, 혹은 Regex는 문자열 내에서 특정 패턴을 검색하고 조작하는 강력한 도구입니다. 숫자만을 찾는 것은 데이터 검증, 전처리 등 다양한 실무 상황에서 유용하게 쓰입니다. 그럼 상세하게 들어가 볼까요?

1. 정규 표현식의 기초 이해하기

정규 표현식은 문자열 패턴을 정의하는 데 사용되는 텍스트 문자열입니다. Java에서는 java.util.regex 패키지를 통해 Regex를 다룰 수 있습니다. 정규 표현식을 사용하기 위해서는 두 가지 주요 클래스가 필요합니다: PatternMatcher.

예를 들어, '12345'와 같은 숫자를 찾고 싶다면, 다음과 같은 간단한 코드를 사용할 수 있습니다:

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

public class RegexExample {
    public static void main(String[] args) {
        String input = "전화번호는 010-1234-5678입니다.";
        String regex = "\\d+"; // 하나 이상의 숫자를 찾는 패턴
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);

        while (matcher.find()) {
            System.out.println("찾은 숫자: " + matcher.group());
        }
    }
}

2. 숫자만 포함된 문자열 검증

주어진 문자열이 숫자로만 구성되어 있는지 확인하고 싶다면, 다음과 같은 정규 표현식을 사용할 수 있습니다. ^[0-9]+$는 문자열의 시작과 끝을 나타내어, 전체 문자열이 숫자여야 함을 의미합니다.

예를 들어, 다음과 같은 코드를 통해 숫자만 포함된 문자열을 확인할 수 있습니다:

public class ValidationExample {
    public static void main(String[] args) {
        String input = "12345";
        String regex = "^[0-9]+$"; // 전체 문자열이 숫자여야 함
        boolean isValid = input.matches(regex);
        System.out.println("숫자만 포함되나요? " + isValid);
    }
}

3. 주어진 문자열에서 숫자 추출하기

문자열 내에서 모든 숫자를 추출하고 싶다면, 수집된 숫자를 List에 저장할 수 있습니다. 아래의 예제는 문자열에서 모든 숫자를 추출하여 저장하고 출력하는 방법을 보여줍니다.

import java.util.ArrayList;
import java.util.List;

public class ExtractNumbersExample {
    public static void main(String[] args) {
        String input = "상품 코드: A123, B456, C789";
        String regex = "\\d+"; // 모든 숫자 추출
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        List<String> numbers = new ArrayList<>();

        while (matcher.find()) {
            numbers.add(matcher.group());
        }

        System.out.println("추출된 숫자들: " + numbers);
    }
}

4. 숫자 포맷팅 및 변환

경우에 따라 숫자 형식을 변환해야 할 필요가 있습니다. Java에서는 DecimalFormat 클래스를 통해 숫자를 포맷팅할 수 있습니다. 예를 들어, 천 단위 구분 기호를 추가하거나 소수점 이하 자리를 설정할 수 있습니다.

import java.text.DecimalFormat;

public class NumberFormattingExample {
    public static void main(String[] args) {
        double number = 1234567.89;
        DecimalFormat formatter = new DecimalFormat("#,###.##");
        String formattedNumber = formatter.format(number);
        System.out.println("포맷팅된 숫자: " + formattedNumber);
    }
}

5. 숫자 포함 여부 검사

문자열 내에 숫자가 포함되어 있는지 확인하는 것도 유용합니다. 이때 사용할 수 있는 정규 표현식은 .*\\d.*입니다. 다양한 문자열 속에 숫자가 있는지를 판별하는 간단한 예제를 살펴보겠습니다.

public class ContainsNumberExample {
    public static void main(String[] args) {
        String input = "항목 10개입니다.";
        String regex = ".*\\d.*"; // 숫자가 하나라도 포함되면 true
        boolean containsNumber = input.matches(regex);
        System.out.println("숫자가 포함되어 있나요? " + containsNumber);
    }
}

6. 정규 표현식의 성능 및 최적화

복잡하고 큰 문자열에서 정규 표현식을 사용할 때 성능 문제가 발생할 수 있습니다. 숫자 검색과 같은 간단한 경우는 문제가 되지 않지만, 복잡한 패턴 일치에서는 최적화가 필요합니다. 항상 필요한 패턴만을 사용하고, 캡처 그룹을 최소화하세요.

예를 들어, <code>(?:pattern)</code>와 같이 비캡처 그룹을 사용하면 성능이 향상됩니다. 정규 표현식을 사용할 때는 패턴을 간단하게 유지하고, 필요 없는 후행 공백이나 불필요한 문자를 포함시키지 않는 것이 좋습니다.

결론


Java에서 숫자를 찾는 정규 표현식을 통해 유용한 데이터를 쉽게 추출하고 검증할 수 있습니다. 오늘 소개한 예제들을 통해 기본기를 다지고, 다양한 상황에 맞는 정규 표현식을 작성해 보세요. 실무에서 자주 사용되는 패턴을 정리해 두는 것도 좋은 방법입니다. 여러분의 프로그래밍 실력 향상에 도움이 되기를 바랍니다!

더 궁금한 점이나 자기만의 정규 표현식이 필요하다면 언제든지 댓글로 남겨주세요. 감사합니다!

반응형