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

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

このチュートリアルでは、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

  • Java で文字列に文字が含まれているかどうかを調べる方法
  • Java で文字を文字列に変換する方法
  • comments powered by Disqus