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

Java로 문자열에서 1과 2를 제외한 모든 숫자 제거하기

문자열 처리 작업 중에는 특정 숫자만 남기고 나머지 숫자를 모두 제거해야 하는 경우가 있습니다. Java에서는 정규 표현식(Regular Expression)과 replaceAll() 메서드를 조합하면 이러한 작업을 간단하게 처리할 수 있습니다.

핵심 원리

  • 정규 표현식 "(?<!\d)숫자(?!\d)"는 지정한 숫자 하나와 정확히 일치합니다. 여기서 (?<!\d)는 뒤쪽 탐색(Lookbehind), (?!\d)는 앞쪽 탐색(Lookahead)으로, 해당 숫자 앞뒤에 다른 숫자가 붙어 있지 않은 경우에만 매칭됩니다. 즉, '12'처럼 두 자리 숫자의 일부가 아닌 독립적인 '1'이나 '2'만 찾아냅니다.
  • replaceAll() 메서드는 정규 표현식 패턴과 대체 문자열 두 개의 인자를 받으며, 입력 문자열에서 패턴에 일치하는 부분을 지정한 문자열로 교체합니다.
  • 따라서 문자열에서 1과 2를 제외한 모든 숫자를 제거하려면, 먼저 숫자 1과 2를 각각 "one"과 "two" 같은 단어로 치환한 뒤, 나머지 모든 숫자를 빈 문자열로 대체하면 됩니다.

예제 코드

import java.util.Scanner;
public class RegexExample {
    public static void main(String args[]) {
        // 사용자로부터 문자열 입력받기
        System.out.println("문자열을 입력하세요");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        // 숫자 1과 일치하는 정규 표현식
        String regex1 = "(?<!\\d)1(?!\\d)";
        // 숫자 2와 일치하는 정규 표현식
        String regex2 = "(?<!\\d)2(?!\\d)";
        // 1과 2는 단어로 치환하고, 나머지 숫자는 모두 제거
        String result = input.replaceAll(regex1, "one")
            .replaceAll(regex2, "two")
            .replaceAll("\\s*\\d+", "");
        System.out.print("결과: " + result);
    }
}

실행 결과

문자열을 입력하세요
sample 1 2 3 4 5 6
결과: sample one two

동작 방식 설명

위 예제의 처리 과정은 다음 세 단계로 이루어집니다.

  1. 1차 치환: 독립적으로 존재하는 숫자 1을 "one"으로 바꿉니다. 이때 앞뒤 탐색 조건 덕분에 '12' 속의 '1'은 치환되지 않습니다.
  2. 2차 치환: 마찬가지 방식으로 숫자 2를 "two"로 바꿉니다.
  3. 3차 치환: 정규 표현식 \s*\d+를 사용하여 남아 있는 모든 숫자와 그 앞의 공백까지 빈 문자열로 제거합니다. 공백까지 함께 제거하므로 결과 문자열에 불필요한 연속 공백이 생기지 않습니다.

이처럼 앞쪽·뒤쪽 탐색 기능을 활용하면 다중 자릿수 숫자와 충돌하지 않으면서 특정 숫자만 안전하게 보호할 수 있어, 다양한 문자열 필터링 작업에 응용할 수 있습니다.