java.util.regex.Matcher 클래스는 다양한 매칭(match) 연산을 수행하는 엔진을 나타냅니다. 이 클래스는 별도의 생성자가 없으며, java.util.regex.Pattern 클래스의 matcher() 메서드를 통해 객체를 생성하거나 얻을 수 있습니다.
Matcher 클래스의 end() 메서드는 현재 객체가 나타내는 마지막 매칭 결과의 끝 위치(오프셋)를 반환합니다. 즉, 마지막으로 일치한 문자 바로 뒤의 인덱스 값을 알려줍니다.
정규 표현식에서 하위 표현식 [...](문자 클래스)은 대괄호 안에 지정된 문자들을 입력 문자열에서 찾아 매칭합니다. 아래 예제에서는 이 표현식을 사용해 문자 t를 찾는 방법을 살펴봅니다.
예제의 처리 흐름
compile()메서드를 사용하여 정규 표현식을 컴파일합니다.컴파일된 패턴으로부터 Matcher 객체를 얻습니다.
find()메서드로 매칭이 발견될 때마다end()메서드를 호출하여 오프셋 값을 출력합니다.
예제 코드
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EndExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter input text: ");
String input = sc.nextLine();
String regex = "[t]";
// 패턴 객체 생성
Pattern pattern = Pattern.compile(regex);
// 문자열에서 컴파일된 패턴과 매칭 수행
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find()) {
int end = matcher.end();
System.out.println(end);
}
}
}실행 결과
Enter input text: Hello how are you welcome to Tutorialspoint 27 32 43
결과 분석
입력 문자열에 문자 t가 세 번 등장했기 때문에, 세 개의 오프셋 값(각 문자가 나타난 직후의 위치 인덱스)이 출력되는 것을 확인할 수 있습니다.
여기서 오프셋이란 해당 문자가 매칭된 직후의 위치를 의미하며, 인덱스는 0부터 시작한다는 점에 유의하세요. 예를 들어 첫 번째 출력값인 27은 입력 문자열에서 26번째 인덱스에 있던 't' 문자 바로 다음 위치를 가리킵니다.
참고: 관련 메서드
start(): 마지막 매칭이 시작된 인덱스를 반환합니다.
end(): 마지막 매칭이 끝난 직후의 인덱스(오프셋)를 반환합니다.
group(): 마지막 매칭된 실제 문자열을 반환합니다.