개요
정규식에서 메타 문자 "."(점)는 줄바꿈 문자를 제외한 모든 문자와 매칭됩니다. 이 특성을 활용하면 Java에서 입력받은 문자열을 한 글자씩 분리하여 출력할 수 있습니다.
정규식을 사용해 문자열의 모든 문자를 출력하는 절차는 다음과 같습니다.
- compile() 메서드로 정규 표현식을 컴파일하여 Pattern 객체를 생성합니다.
- matcher() 메서드에 대상 문자열을 전달하여 Matcher 객체를 생성합니다.
- find() 메서드로 매칭되는 부분을 순차적으로 찾고, 매칭이 발견될 때마다 group() 메서드를 사용해 해당 문자를 추출하여 출력합니다.
예제 코드
아래 예제는 사용자로부터 문자열을 입력받아 정규식으로 한 글자씩 출력하는 프로그램입니다.
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
public static void main(String args[]) {
// 모든 문자와 매칭되는 정규 표현식
String regex = ".";
Scanner sc = new Scanner(System.in);
System.out.println("문자열을 입력하세요: ");
String input = sc.nextLine();
// Pattern 객체 생성
Pattern p = Pattern.compile(regex);
// Matcher 객체 생성
Matcher m = p.matcher(input);
// 매칭 결과를 한 글자씩 출력
while (m.find()) {
System.out.println(m.group());
}
}
}실행 결과
문자열을 입력하세요: This is a sample text T h i s i s a s a m p l e t e x t
코드 설명
Pattern.compile(".")은 모든 단일 문자와 일치하는 패턴을 만듭니다. 이후 p.matcher(input)으로 입력 문자열에 대한 Matcher를 얻고, while(m.find()) 루프를 돌며 매칭되는 각 문자를 m.group()으로 꺼내 출력합니다. 공백 문자도 하나의 문자로 취급되어 함께 출력된다는 점에 유의하세요.
참고 사항
기본적으로 "."는 줄바꿈 문자(\n)는 매칭하지 않습니다. 여러 줄의 입력에서 줄바꿈 문자까지 포함하려면 Pattern.DOTALL 플래그를 사용하면 됩니다. 또한 문자열을 한 글자씩 처리하는 것이 목적이라면 정규식보다 String.toCharArray()나 charAt()을 사용하는 것이 더 간단하고 효율적일 수 있습니다.