Javaで、文字列に部分文字列が含まれているかどうか(大文字小文字を無視して)を確認するには?

str1str2という2つのStringがあります。大文字小文字を区別せずに、str2str1` の中に含まれているかどうかを調べるにはどうしたらよいでしょうか。

ソリューション
str1.toLowerCase().contains(str2.toLowerCase())
解説 (9)

toLowerCase()`メソッドを使うことができます。

public boolean contains( String haystack, String needle ) {
  haystack = haystack == null ? "" : haystack;
  needle = needle == null ? "" : needle;

  // Works, but is not the best.
  //return haystack.toLowerCase().indexOf( needle.toLowerCase() ) > -1

  return haystack.toLowerCase().contains( needle.toLowerCase() )
}

を使って呼び出してみましょう。

if( contains( str1, str2 ) ) {
  System.out.println( "Found " + str2 + " within " + str1 + "." );
}

独自のメソッドを作成することで、再利用できることに注目してください。また、誰かが「indexOf」ではなく「contains」を使うべきだと指摘してきたときにも、変更するコードは1行で済みます。

解説 (2)

Stringクラスに含まれるcontainsメソッドとtoUpperメソッドを組み合わせて使用します。 その例を以下に示します。

String string1 = "AAABBBCCC"; 
String string2 = "DDDEEEFFF";
String searchForThis = "AABB";

System.out.println("Search1="+string1.toUpperCase().contains(searchForThis.toUpperCase()));

System.out.println("Search2="+string2.toUpperCase().contains(searchForThis.toUpperCase()));

これは次のように返します。 検索1=true
検索2=false

解説 (2)