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