Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 정규식 \S 메타문자 완벽 가이드

\S 메타문자란?

Java 정규식(Regular Expression)에서 메타문자 "\S"는 공백이 아닌 모든 문자와 일치하는 하위 표현식입니다. 여기서 공백 문자(white space)에는 스페이스, 탭, 줄바꿈 등이 포함됩니다. 따라서 "\S" 패턴을 사용하면 문자열에서 공백을 제외한 실질적인 문자만 찾아내거나 개수를 계산할 수 있습니다.

참고로 소문자 "\s"가 공백 문자 자체와 일치한다면, 대문자 "\S"는 정확히 그 반대 역할을 합니다.

예제 1: 공백을 제외한 문자 개수 세기

다음 예제는 주어진 문자열에서 "\S" 패턴과 일치하는 문자, 즉 공백이 아닌 문자가 몇 개인지 세어 출력합니다.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexExample {
    public static void main(String args[]) {
        String regex = "\\S";
        String input = "Hello how are you welcome to Tutorialspoint !";
        
        // Pattern 객체 생성
        Pattern p = Pattern.compile(regex);
        // Matcher 객체 생성
        Matcher m = p.matcher(input);
        int count = 0;
        
        while(m.find()) {
            count++;
        }
        System.out.println("Number of matches: "+count);
    }
}

실행 결과

Number of matches: 38

입력 문자열 전체 길이에서 공백 9개를 제외하면 38개의 문자가 남으며, 이 문자들이 모두 "\S" 패턴과 일치했음을 확인할 수 있습니다.

예제 2: 사용자 입력 문자열에서 공백 제외 문자 수 확인

다음 예제는 Scanner 클래스를 사용해 사용자로부터 5개의 문자열을 입력받은 뒤, 각 문자열에 포함된 공백을 제외한 문자 개수를 계산하여 출력합니다.

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Example {
    public static void main(String args[]) {
        String regex = "\\S";
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter 5 input strings: ");
        String input[] = new String[5];
        
        for (int i=0; i<5; i++) {
            input[i] = sc.nextLine();
        }
        
        // Pattern 객체 생성
        Pattern p = Pattern.compile(regex);
        System.out.println("Number of characters in each string w/o spaces: ");
        
        for(int i=0; i<5; i++) {
            // Matcher 객체 생성
            Matcher m = p.matcher(input[i]);
            int count = 0;
            while(m.find()) {
                count++;
            }
            System.out.println("String "+i+": "+count);
        }
    }
}

실행 결과

Enter 5 input strings:
sample123
test data
test *123
ab bc cd de
hello how are you welcome to Tutorialspoint
Number of characters in each string w/o spaces:
String 0: 9
String 1: 8
String 2: 8
String 3: 8
String 4: 37

마무리

"\S" 메타문자는 문자열에서 공백을 걸러내고 실질적인 내용만 분석하고 싶을 때 매우 유용합니다. 위 예제처럼 Matcher 객체의 find() 메서드를 반복 호출하며 일치 횟수를 세는 방식은 Java 정규식 프로그래밍에서 가장 기본적이면서도 널리 사용되는 패턴이니 꼭 익혀두시기 바랍니다.