java.util.regex.Matcher 클래스는 다양한 매칭(match) 연산을 수행하는 엔진 역할을 하는 클래스입니다. 이 클래스는 별도의 생성자가 없으며, java.util.regex.Pattern 클래스의 matcher() 메서드를 통해 객체를 생성하거나 얻을 수 있습니다.
Matcher 클래스의 start() 메서드는 매칭된 문자의 시작 인덱스(위치)를 반환합니다. 정규식으로 문자열을 검색할 때 해당 문자가 몇 번째 위치에서 발견되었는지 확인할 수 있어 매우 유용합니다.
start() 메서드 동작 방식
정규 표현식에서 대괄호 [...]는 괄호 안에 지정된 문자들과 일치하는지 검사하는 하위 표현식입니다. 아래 예제에서는 이를 활용해 입력 문자열에서 문자 't'를 찾아 그 위치를 출력합니다.
예제의 처리 과정은 다음과 같습니다.
- compile() 메서드를 사용하여 정규 표현식을 컴파일합니다.
- 컴파일된 패턴으로부터 Matcher 객체를 얻습니다.
- find() 메서드로 매칭이 발견될 때마다 start() 메서드를 호출하여 시작 인덱스를 구합니다.
예제 코드
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StartExample {
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);
while (matcher.find()) {
int start = matcher.start();
System.out.println(start);
}
}
}
실행 결과
Enter input text: Hello how are you welcome to Tutorialspoint 26 31 42
결과 분석
입력 문자열에 문자 't'가 세 번 등장했기 때문에, 실행 결과로 세 개의 인덱스 값(각 문자의 위치)이 출력된 것을 확인할 수 있습니다. 즉, 26번째, 31번째, 42번째 위치에서 각각 't'가 발견된 것입니다.
이처럼 start() 메서드는 find() 메서드와 함께 사용하면 정규식으로 찾은 모든 매칭 결과의 정확한 위치를 손쉽게 추적할 수 있습니다. 문자열 분석, 로그 파싱, 텍스트 하이라이팅 등 다양한 실무 시나리오에서 활용도가 높으니 꼭 익혀두시길 권장합니다.