Java で文字列にサブストリングが含まれているかどうかを調べる方法

Mohammad Irfan 2023年10月12日
  1. Java で文字列に部分文字列が含まれているかどうかをチェックする
  2. Java の indexOf() メソッドを用いた部分文字列の検索
  3. Java で正規表現を用いた部分文字列の検索
  4. Java で Apache を使ってサブストリングを探す
  5. Java Regex を使って文字列を探す
Java で文字列にサブストリングが含まれているかどうかを調べる方法

このチュートリアルでは、Java で文字列に部分文字列が含まれているかどうかをチェックする方法を紹介し、それを理解するためのコード例を挙げています。

Java で文字列に部分文字列が含まれているかどうかをチェックする

別の文字列の一部である文字列は、その String オブジェクトの部分文字列として知られています。文字列は文字列であり、Java では不変のオブジェクトです。与えられた文字列の中に部分文字列が存在するかどうかを調べてみよう。

この例では、文字列の部分文字列が見つかった場合に true を返す String クラスの contains() メソッドを用いています。大文字小文字を無視するかどうかを調べるには toLowerCase() メソッドを用います。

public class SimpleTesting {
  public static void main(String[] args) {
    String str = "abracadaabra";
    String subStr = "daa";
    boolean containsStr = str.contains(subStr);
    System.out.println(containsStr);

    // Check with string ignore case
    subStr = "Daa";
    containsStr = str.toLowerCase().contains(subStr.toLowerCase());
    System.out.println(containsStr);

    subStr = "baa";
    containsStr = str.toLowerCase().contains(subStr.toLowerCase());
    System.out.println(containsStr);
  }
}

出力:

true
true
false

Java の indexOf() メソッドを用いた部分文字列の検索

String クラスの indexOf() メソッドは文字列中の部分文字列のインデックスを取得するために用いられるが、部分文字列を見つけるためにも用いることができます。

ここでは、部分文字列のインデックスがゼロ以上であるかどうかを調べる。文字列の中に部分文字列が存在しない場合は -1 を返します。

例と出力を見てほしい。

public class SimpleTesting {
  public static void main(String[] args) {
    String str = "abracadaabra";
    String subStr = "daa";
    boolean containsStr = str.indexOf(subStr) >= 0;
    System.out.println(containsStr);

    // check with string ignore case
    subStr = "DaA";
    containsStr = str.toLowerCase().indexOf(subStr.toLowerCase()) >= 0;
    System.out.println(containsStr);

    subStr = "aaa";
    containsStr = str.indexOf(subStr) >= 0;
    System.out.println(containsStr);
  }
}

出力:

true
true
false

Java で正規表現を用いた部分文字列の検索

また、正規表現を引数に取り、truefalse を返す String オブジェクトの matches() メソッドも利用できます。

public class SimpleTesting {
  public static void main(String[] args) {
    String str = "abracadaabra";
    String subStr = "daa";
    boolean containsStr = str.matches("(?i).*" + subStr + ".*");
    System.out.println(containsStr);

    subStr = "daa";
    containsStr = str.matches("(?i).*" + subStr + ".*");
    System.out.println(containsStr);
  }
}

出力:

true
true

Java で Apache を使ってサブストリングを探す

Apache commons ライブラリを利用している場合、StringUtils クラスの containsIgnoreCase() メソッドを利用することで、部分文字列が見つかった場合には true を、そうでない場合には false を返すことができます。以下の例を参照してください。

import org.apache.commons.lang3.StringUtils;

public class SimpleTesting {
  public static void main(String[] args) {
    String str = "abracadaabra";
    String subStr = "daa";
    boolean containsStr = StringUtils.containsIgnoreCase(str, subStr);
    System.out.println(containsStr);

    subStr = "DAa";
    containsStr = StringUtils.containsIgnoreCase(str, subStr);
    System.out.println(containsStr);

    subStr = "AcWF";
    containsStr = StringUtils.containsIgnoreCase(str, subStr);
    System.out.println(containsStr);
  }
}

出力:

true
true
false

Java Regex を使って文字列を探す

Java はいくつかのクラスやメソッドを含む regex パッケージを提供しています。これらのクラスの一つに Pattern クラスがあり、compile()quote()matcher() などのメソッドを提供しています。ここでは、これらのメソッドを使って部分文字列を探す。

import java.util.regex.Pattern;

public class SimpleTesting {
  public static void main(String[] args) {
    String str = "abracadaabra";
    String subStr = "daa";
    boolean containsStr =
        Pattern.compile(Pattern.quote(subStr), Pattern.CASE_INSENSITIVE).matcher(str).find();
    System.out.println(containsStr);

    subStr = "RaCA";
    containsStr =
        Pattern.compile(Pattern.quote(subStr), Pattern.CASE_INSENSITIVE).matcher(str).find();
    System.out.println(containsStr);
  }
}

出力:

true
true

関連記事 - Java String