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

Java Matcher hitEnd() 메서드 완벽 정리: 개념부터 실전 예제까지

java.util.regex.Matcher 클래스는 문자열에서 다양한 매칭(match) 연산을 수행하는 엔진 역할을 하는 클래스입니다. 이 클래스는 별도의 생성자를 제공하지 않으며, java.util.regex.Pattern 클래스의 matcher() 메서드를 호출하여 객체를 생성하거나 얻을 수 있습니다.

hitEnd() 메서드는 직전에 수행한 매칭 작업 도중 입력 데이터의 끝(end of input)에 도달했는지 여부를 검사합니다. 끝에 도달했다면 true, 그렇지 않다면 false를 반환합니다. 이 메서드가 true를 반환한다는 것은, 추가적인 입력 데이터가 제공될 경우 매칭 결과가 달라질 수 있음을 의미합니다.

hitEnd() 메서드의 동작 원리

쉬운 이해를 위해 예시를 들어보겠습니다. 정규식 "you$"를 사용하여 입력 문자열의 마지막 단어가 "you"인지 확인하는 상황이라고 가정해 봅시다. 첫 번째 입력 줄이 "hello how are you"라면 매칭에 성공할 것입니다.

그러나 이후 더 많은 문장을 추가로 입력받는다면 어떻게 될까요? 새로운 줄의 마지막 단어가 반드시 "you"라고 보장할 수 없으므로, 매칭 결과는 false로 바뀔 수 있습니다. 바로 이처럼 추가 입력에 따라 결과가 달라질 가능성이 있는 상황에서 hitEnd() 메서드는 true를 반환합니다.

예제 코드

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

public class HitEndExample {
    public static void main(String args[]) {
        String regex = "you$";
        // 사용자로부터 입력 받기
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter input text: ");
        String input = sc.nextLine();
        // Pattern 클래스 인스턴스 생성
        Pattern pattern = Pattern.compile(regex);
        // Matcher 클래스 인스턴스 생성
        Matcher matcher = pattern.matcher(input);
        // 매칭 여부 확인
        if(matcher.find()) {
            System.out.println("Match found");
        }
        boolean result = matcher.hitEnd();
        if(result) {
            System.out.println("More input may turn the result of the match false");
        } else {
            System.out.println("The result of the match will be true, inspite of more data");
        }
    }
}

실행 결과

Enter input text:
Hello how are you
Match found
More input may turn the result of the match false

결과 해석

위 실행 결과를 보면, 입력된 문자열 "Hello how are you"가 정규식 "you$"와 매칭되어 "Match found"가 출력되었습니다. 동시에 hitEnd() 메서드가 true를 반환했기 때문에, 추가 입력이 들어올 경우 매칭 결과가 false로 변경될 수 있다는 메시지가 함께 출력됩니다.

즉, hitEnd()는 스트리밍 입력이나 대용량 텍스트를 순차적으로 처리할 때 현재까지의 매칭 결과가 확정적인 것인지, 아니면 추가 데이터에 따라 달라질 수 있는 것인지 판단하는 데 유용하게 활용됩니다.