Java
 Computer >> コンピューター >  >> プログラミング >> Java

【Java】StringUtils.containsIgnoreCase()で大文字小文字を無視して部分文字列の有無を判定する方法


Apache Commonsライブラリ(org.apache.commons.lang3パッケージ)のStringUtilsクラスには、containsIgnoreCase()という便利なメソッドが用意されています。

このメソッドは「元の文字列」と「検索文字列」の2つのString値を引数として受け取り、大文字と小文字の違いを無視したうえで、元の文字列の中に検索文字列が含まれているかどうかを判定します。戻り値はboolean型で、以下のようになります。

  • 元の文字列に検索文字列が含まれている場合は true を返す

  • 含まれていない場合は false を返す

また、StringUtilsクラスのメソッドはnullセーフに設計されており、引数にnullが渡された場合でもNullPointerExceptionが発生せず、falseが返される点も安心して使えるポイントです。

containsIgnoreCase()メソッドの使い方

大文字小文字を問わず、ある文字列に特定の部分文字列が含まれているかを調べるには、次の手順を実行します。

  1. pom.xmlファイルに以下の依存関係を追加します。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.9</version>
</dependency>
  1. 検索対象となる元の文字列を取得します。

  2. 検索したい文字列を取得します。

  3. containsIgnoreCase()メソッドを呼び出し、上記の2つの文字列を引数として渡します(引数の順序は「元の文字列 → 検索文字列」の順です)。

サンプルファイルの準備

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 doesnot contain the given sub string.");
        }
    }
}

なお、空白を含むフレーズ全体を入力として受け取りたい場合は、sc.next()(単一トークンのみ読み込み)ではなく、sc.nextLine()を使用するとよいでしょう。

実行結果

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

このように、containsIgnoreCase()メソッドを使えば、自前でtoLowerCase()などによる正規化処理を書くことなく、1行で大文字小文字を無視した文字列検索を実現できます。

  1. Javaのcontains()メソッド徹底解説:文字列に部分文字列が含まれるか判定する方法

    Javaのcontains()メソッドは、ある文字列の中に特定の部分文字列(サブストリング)が含まれているかどうかをチェックします。戻り値はtrueまたはfalseのどちらかで、引数として検索したい部分文字列を1つだけ受け取ります。 文字列操作でよくある課題 文字列を扱っていると、その文字列が特定の文字並びを含んでいるかどうかを確認したい場面が頻繁にあります。例えば、ユーザーの電話番号にアメリカの国コード(+1)が含まれているかをチェックするアプリを作る場合などが挙げられます。 Javaには、こうした判定を行うための組み込みメソッド「contains()」が用意されています。この記事

  2. Swiftで文字列が別の文字列を含んでいるか確認する方法

    Swiftである文字列に別の文字列が含まれているかどうかを確認するには、2つの異なる文字列が必要です。1つは検索対象となる文字列、もう1つはその中に特定の文字列が含まれているかを調べる元となる文字列です。 ここでは、確認したい文字列を「point」、全体の文字列を「TutorialsPoint」、そして別の文字列として「one two three」を使用して説明します。Playgroundでこれらの文字列を使って実際に確認してみましょう。 この確認は、以下に示す2つの方法で行うことができます。まずは3つの異なる文字列を作成します。 var completeStr1 = Tutorials po