Java 정규식에서는 메타 문자 \S를 사용하여 공백이 아닌(non-whitespace) 문자를 매칭할 수 있습니다.
대문자 \S는 공백, 탭, 줄바꿈 등 모든 화이트스페이스를 제외한 단일 문자와 일치합니다. 반대로 소문자 \s는 화이트스페이스 자체를 의미하므로, 두 메타 문자의 차이를 혼동하지 않도록 주의해야 합니다.
예제 코드
아래 예제는 사용자로부터 문자열을 입력받은 뒤, 정규식 \S를 적용하여 공백을 제외한 문자의 개수를 세어 출력합니다.
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String args[]) {
// 사용자로부터 문자열 입력 받기
System.out.println("문자열을 입력하세요");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
String regex = "\\S";
// 정규식 컴파일
Pattern pattern = Pattern.compile(regex);
// Matcher 객체 생성
Matcher matcher = pattern.matcher(input);
int count = 0;
while(matcher.find()) {
count++;
}
System.out.println("공백을 제외한 문자 수: " + count);
}
}코드 설명
- Pattern.compile(regex): 문자열 "\\S"를 정규식 패턴으로 컴파일합니다. Java 문자열에서 역슬래시는 이스케이프 문자이므로 \\S로 표기해야 합니다.
- pattern.matcher(input): 입력 문자열에 대해 매칭 작업을 수행할 Matcher 객체를 반환합니다.
- matcher.find(): 일치하는 문자를 하나씩 순차적으로 찾으며, 발견될 때마다 카운트를 1씩 증가시킵니다.
실행 결과
문자열을 입력하세요 Hello how are you welcome to tutorialspoint 공백을 제외한 문자 수: 37
입력된 문장에는 총 41개의 문자 중 공백 4개가 포함되어 있으므로, 공백을 제외한 37개의 문자가 카운트된 것을 확인할 수 있습니다.