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

Java Matcher find() 메서드 완벽 가이드 - 예제 코드로 배우기

Java에서 정규표현식을 활용한 문자열 검색은 매우 강력한 기능입니다. java.util.regex.Matcher 클래스는 패턴과 입력 문자열 간의 다양한 매칭(match) 연산을 수행하는 엔진 역할을 합니다.

Matcher 객체란?

Matcher 클래스는 별도의 public 생성자가 없습니다. 대신 java.util.regex.Pattern 클래스의 matcher() 메서드를 호출하여 Matcher 객체를 생성할 수 있습니다.

find() 메서드의 동작 원리

Matcher 클래스의 find() 메서드는 현재 Matcher 객체가 가진 패턴과 일치하는 다음 하위 시퀀스(subsequence)를 입력 문자열에서 찾습니다.

  • 매칭에 성공하면 true를 반환합니다.
  • 매칭에 실패하면 false를 반환합니다.

이 메서드는 여러 번 호출할 수 있으며, 호출될 때마다 이전 매칭이 끝난 지점부터 다음 매칭을 탐색한다는 점이 특징입니다.

예제 코드

다음 예제는 사용자로부터 문자열을 입력받아, 해당 문자열에 숫자가 아닌(non-digit) 문자가 포함되어 있는지 확인하는 프로그램입니다.

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

public class FindExample {
    public static void main(String args[]) {
        // 문자열 값 읽기
        Scanner sc = new Scanner(System.in);
        System.out.println("문자열을 입력하세요");
        String input = sc.nextLine();

        // 숫자가 아닌 문자를 찾기 위한 정규표현식
        String regex = "(\\D)";

        // 정규표현식 컴파일
        Pattern pattern = Pattern.compile(regex);

        // Matcher 객체 가져오기
        Matcher matcher = pattern.matcher(input);

        // 매칭 여부 확인
        if (matcher.find()) {
            System.out.println("입력한 문자열에 숫자가 아닌 문자가 포함되어 있습니다.");
        } else {
            System.out.println("입력한 문자열에 숫자가 아닌 문자가 포함되어 있지 않습니다.");
        }
    }
}

실행 결과

문자열을 입력하세요
11245#
입력한 문자열에 숫자가 아닌 문자가 포함되어 있습니다.

코드 설명

위 예제에서 정규표현식 (\D)는 '숫자가 아닌 단일 문자'를 의미합니다. 입력값 11245# 중 마지막의 #가 숫자가 아니므로 find() 메서드가 매칭에 성공하여 true를 반환하고, 조건문의 첫 번째 블록이 실행됩니다.

만약 입력값이 11245처럼 순수하게 숫자로만 구성되어 있다면, 매칭에 실패해 false가 반환되고 else 블록의 메시지가 출력됩니다.

정리

find() 메서드는 문자열 내에서 특정 패턴의 존재 여부를 확인할 때 유용하게 사용됩니다. 반복적으로 호출하면 일치하는 모든 부분을 순차적으로 찾을 수 있어, 텍스트 파싱이나 데이터 유효성 검사 등 다양한 상황에서 활용도가 높습니다.