En Java, ¿cómo puedo comprobar si una cadena contiene una subcadena (ignorando las mayúsculas y minúsculas)?

Tengo dos Strings, str1 y str2. Cómo puedo comprobar si str2 está contenida dentro de str1, ignorando las mayúsculas y minúsculas?

Solución
str1.toLowerCase().contains(str2.toLowerCase())
Comentarios (9)

Puede utilizar el método 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() )
}

Entonces llámalo usando:

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

Observa que al crear tu propio método, puedes reutilizarlo. Luego, cuando alguien le indique que debería usar contains en lugar de indexOf, sólo tendrá que cambiar una línea de código.

Comentarios (2)

Yo utilizaría una combinación del método contains y el método toUpper que forman parte de la clase String. Un ejemplo es el siguiente:

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()));

Esto devolverá:

Search1=true
Search2=false

Comentarios (2)