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

예제로 배우는 Java Pattern의 CASE_INSENSITIVE 필드

Pattern.CASE_INSENSITIVE 필드란?

Java의 java.util.regex.Pattern 클래스가 제공하는 CASE_INSENSITIVE 필드는 정규 표현식 매칭 시 대소문자를 구분하지 않도록 설정하는 플래그입니다. 이 값을 compile() 메서드의 두 번째 인자로 전달하면, 이후 검색 과정에서 영문자의 대문자와 소문자가 모두 동일한 문자로 취급됩니다.

참고: 기본적으로 이 플래그는 ASCII 문자에만 적용됩니다. 그 외 유니코드 문자까지 대소문자 구분 없이 매칭하려면 UNICODE_CASE 플래그와 함께 사용해야 합니다.

또한 패턴 문자열 안에 인라인 플래그인 (?i)를 삽입하는 방법으로도 동일한 효과를 얻을 수 있습니다.

예제 1: 대소문자 구분 없이 특정 문자 개수 세기

다음 예제는 사용자로부터 문장과 찾고 싶은 문자 하나를 입력받아, 해당 문자가 문장 안에 몇 번 등장하는지 대소문자를 구분하지 않고 계산합니다.

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

public class CASE_INSENSITIVE_Example {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        System.out.println("입력 데이터를 입력하세요: ");
        String input = sc.nextLine();
        System.out.println("찾을 문자를 입력하세요: ");
        char ch = sc.next().toCharArray()[0];
        // 찾으려는 문자를 위한 정규 표현식
        String regex = "[" + ch + "]";
        // 정규 표현식 컴파일 (대소문자 구분 없음)
        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        // Matcher 객체 생성
        Matcher matcher = pattern.matcher(input);
        int count = 0;
        while (matcher.find()) {
            count++;
        }
        System.out.println("문자 " + ch + "는(은) 주어진 텍스트에서 " + count + "번 나타났습니다 (대소문자 구분 없음)");
    }
}

실행 결과

입력 데이터를 입력하세요:
Tutorials Point originated from the idea that there exists a class 
of readers who respond better to online content and prefer to learn 
new skills at their own pace from the comforts of their drawing rooms.
찾을 문자를 입력하세요:
T
문자 T는(은) 주어진 텍스트에서 20번 나타났습니다 (대소문자 구분 없음)

입력된 지문에는 대문자 'T'와 소문자 't'가 섞여 있지만, CASE_INSENSITIVE 플래그 덕분에 두 경우 모두 같은 문자로 간주되어 총 20회로 집계되었습니다. 만약 이 플래그를 사용하지 않았다면 대문자 'T'만 카운트되었을 것입니다.

예제 2: 입력값이 boolean인지 검사하기

다음 예제는 true|false 정규 표현식에 CASE_INSENSITIVE 플래그를 적용하여, 입력된 문자열이 boolean 형태인지 확인합니다. 이 방식을 사용하면 "TRUE", "False"처럼 대소문자가 뒤섞인 입력도 올바르게 처리할 수 있습니다.

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

public class VerifyBoolean {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        System.out.println("문자열 값을 입력하세요: ");
        String str = sc.next();
        Pattern pattern = Pattern.compile("true|false", Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(str);
        if (matcher.matches()) {
            System.out.println("주어진 문자열은 boolean 타입입니다");
        } else {
            System.out.println("주어진 문자열은 boolean 타입이 아닙니다");
        }
    }
}

실행 결과

문자열 값을 입력하세요:
true
주어진 문자열은 boolean 타입입니다
문자열 값을 입력하세요:
false
주어진 문자열은 boolean 타입입니다
문자열 값을 입력하세요:
hello
주어진 문자열은 boolean 타입이 아닙니다

정리

Pattern.CASE_INSENSITIVE 플래그는 정규 표현식에서 대소문자 구분을 없애야 하는 상황에서 매우 유용합니다. 사용자 입력 검증, 키워드 검색, 로그 분석 등 대소문자가 일정하지 않은 데이터를 다룰 때 이 플래그를 활용하면 별도의 전처리 없이 깔끔하고 안정적인 매칭 로직을 작성할 수 있습니다.