Java で文字列にサブストリングが含まれているかどうかを調べる方法
- Java で文字列に部分文字列が含まれているかどうかをチェックする
-
Java の
indexOf()
メソッドを用いた部分文字列の検索 - Java で正規表現を用いた部分文字列の検索
-
Java で
Apache
を使ってサブストリングを探す - 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 で正規表現を用いた部分文字列の検索
また、正規表現を引数に取り、true
か false
を返す 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