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

Java에서 대소문자 구분 없이 부분 문자열 포함 여부 확인하는 방법 – StringUtils.containsIgnoreCase() 완벽 가이드

StringUtils.containsIgnoreCase() 메서드란?

Apache Commons 라이브러리의 org.apache.commons.lang3 패키지에 포함된 StringUtils 클래스는 containsIgnoreCase()라는 편리한 메서드를 제공합니다.

이 메서드는 원본 문자열(source string)과 검색 문자열(search string) 두 개의 String 값을 매개변수로 받아, 대소문자를 구분하지 않고 원본 문자열 안에 검색 문자열이 포함되어 있는지 확인합니다. 확인 결과는 boolean 값으로 반환됩니다.

  • true — 원본 문자열에 검색 문자열이 포함된 경우
  • false — 원본 문자열에 검색 문자열이 포함되지 않은 경우

사용 방법

대소문자와 관계없이 문자열에 특정 부분 문자열이 포함되어 있는지 확인하려면 다음 단계를 따르면 됩니다.

  1. Maven 프로젝트라면 pom.xml 파일에 commons-lang3 의존성을 추가합니다.
  2. 검색 대상이 되는 원본 문자열을 준비합니다.
  3. 찾고자 하는 검색 문자열을 준비합니다.
  4. 두 문자열 객체를 매개변수로 전달하여(원본 문자열이 먼저 오도록 순서를 지켜야 합니다) containsIgnoreCase() 메서드를 호출합니다.

Maven 의존성 추가

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.9</version>
</dependency>

예제

D 드라이브에 다음과 같은 내용을 담은 sample.txt 파일이 있다고 가정해 보겠습니다.

Tutorials point originated from the idea that there exists a class of readers who respond better to on-line content
and prefer to learn new skills at their own pace from the comforts of their drawing rooms.
At Tutorials point we provide high quality learning-aids for free of cost.

다음 Java 예제는 사용자로부터 부분 문자열을 입력받은 뒤, 해당 파일에 그 문자열이 대소문자 구분 없이 포함되어 있는지 확인하는 프로그램입니다.

import java.io.File;
import java.util.Scanner;
import org.apache.commons.lang3.StringUtils;

public class ContainsIgnoreCaseExample {

    public static String fileToString(String filePath) throws Exception {
        String input = null;
        Scanner sc = new Scanner(new File(filePath));
        StringBuffer sb = new StringBuffer();
        while (sc.hasNextLine()) {
            input = sc.nextLine();
            sb.append(input);
        }
        return sb.toString();
    }

    public static void main(String args[]) throws Exception {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the sub string to be verified: ");
        String subString = sc.next();

        String fileContents = fileToString("D:\\sample.txt");

        // 파일에 해당 부분 문자열이 포함되어 있는지 확인 (대소문자 무시)
        boolean result = StringUtils.containsIgnoreCase(fileContents, subString);

        if(result) {
            System.out.println("File contains the given sub string.");
        } else {
            System.out.println("File does not contain the given sub string.");
        }
    }
}

실행 결과

Enter the sub string to be verified:
comforts of their drawing rooms.
File contains the given sub string.

참고: 외부 라이브러리 없이 구현하는 방법

Apache Commons 라이브러리를 사용할 수 없는 환경이라면, 비교하려는 두 문자열을 모두 소문자(또는 대문자)로 변환한 후 표준 String.contains() 메서드를 호출하는 방식으로 동일한 결과를 얻을 수 있습니다.

boolean result = fileContents.toLowerCase().contains(subString.toLowerCase());

다만 이 방식은 원본 문자열의 복사본을 추가로 생성하기 때문에, 매우 긴 문자열을 반복적으로 검색하는 경우에는 성능 면에서 containsIgnoreCase()보다 불리할 수 있습니다. 간단한 일회성 검사라면 충분히 실용적인 대안입니다.