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

Java Matcher usePattern() 메서드 완벽 가이드: 개념부터 실전 예제까지

Matcher 클래스란?

java.util.regex 패키지의 Matcher 클래스는 정규 표현식을 기반으로 다양한 매칭(match) 작업을 수행하는 엔진 역할을 합니다. 이 클래스는 별도의 생성자를 제공하지 않으며, 대신 java.util.regex.Pattern 클래스의 matcher() 메서드를 호출하여 객체를 생성할 수 있습니다.

usePattern() 메서드란?

Matcher 클래스의 usePattern() 메서드는 새로운 정규 표현식 패턴을 나타내는 Pattern 객체를 인수로 받아, 기존에 사용하던 패턴을 새로운 패턴으로 교체한 뒤 해당 패턴으로 매칭을 수행합니다. 하나의 Matcher 객체로 여러 패턴을 순차적으로 적용해야 할 때 유용하게 활용할 수 있습니다.

주요 특징

  • 기존 Matcher 객체의 상태(매칭 위치 등)는 초기화되지 않고 그대로 유지됩니다.
  • 새 Pattern 객체를 인수로 전달받아 현재 Matcher에 적용합니다.
  • 반환값으로 자기 자신(Matcher)을 반환하므로 메서드 체이닝이 가능합니다.

예제 코드

다음 예제는 입력된 문자열에서 특수 문자의 개수를 세고, 이후 usePattern() 메서드를 사용해 새로운 패턴으로 전환하여 문자열 길이 조건을 검사합니다.

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

public class UsePatternExample {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter input text: ");
        String input = sc.nextLine();

        String regex = "[#%&*]";

        // Pattern 객체 생성
        Pattern pattern = Pattern.compile(regex);

        // Matcher 객체 생성
        Matcher matcher = pattern.matcher(input);

        int count = 0;
        while (matcher.find()) {
            count++;
        }

        // 첫 번째 패턴으로 찾은 결과 출력
        System.out.println("The are " + count + " special characters [# % & *] in the given text");

        // 6~15자 길이를 검사하는 새로운 패턴 생성
        Pattern newPattern = Pattern.compile("\\A(?=\\w{6,15}\\z)");

        // usePattern()으로 새 패턴으로 전환
        matcher = matcher.usePattern(newPattern);

        if (matcher.find()) {
            System.out.println("Given input contain 6 to 15 characters");
        } else {
            System.out.println("Given input doesn't contain 6 to 15 characters");
        }
    }
}

실행 결과

Enter input text:
#*mypassword&
The are 3 special characters [# % & *] in the given text
!!mypassword!
Given input doesn't contain 6 to 15 characters

예제 해설

위 코드의 실행 흐름을 단계별로 살펴보면 다음과 같습니다.

  1. 특수 문자 검사: 정규식 [#%&*]을 사용해 입력 문자열에서 #, %, &, * 문자가 몇 번 나타나는지 계산합니다. 입력값 #*mypassword&에는 특수 문자가 3개 포함되어 있습니다.
  2. 패턴 전환: usePattern() 메서드를 호출하여 길이 검증용 패턴 \A(?=\w{6,15}\z)로 교체합니다. 이 패턴은 문자열 전체가 6자 이상 15자 이하의 단어 문자로만 구성되어 있는지 확인합니다.
  3. 결과 확인: 입력값에는 느낌표(!) 같은 특수 문자가 포함되어 있어 \w 조건에 맞지 않으므로, "6~15자 조건을 만족하지 않는다"는 메시지가 출력됩니다.

이처럼 usePattern() 메서드를 활용하면 Matcher 객체를 새로 생성하지 않고도 기존 객체에 다양한 정규 표현식 패턴을 재적용할 수 있어 코드의 효율성과 가독성을 높일 수 있습니다.