¿Cómo comprobar si una cadena contiene otra cadena sin distinguir entre mayúsculas y minúsculas en Java?
Digamos que tengo dos cuerdas,
String s1 = "AbBaCca";
String s2 = "bac";
Quiero realizar una devolución de cheque que s2
se encuentra dentro del archivo s1
. Puedo hacer esto con:
return s1.contains(s2);
Estoy bastante seguro de que contains()
distingue entre mayúsculas y minúsculas, sin embargo, no puedo determinarlo con seguridad leyendo la documentación. Si es así, supongo que mi mejor método sería algo como:
return s1.toLowerCase().contains(s2.toLowerCase());
Aparte de todo esto, ¿hay otra forma (posiblemente mejor) de lograr esto sin preocuparse por la distinción entre mayúsculas y minúsculas?
Sí, contiene distingue entre mayúsculas y minúsculas. Puede utilizar java.util.regex.Pattern con el indicador CASE_INSENSITIVE para coincidencias que no distinguen entre mayúsculas y minúsculas:
Pattern.compile(Pattern.quote(wantedStr), Pattern.CASE_INSENSITIVE).matcher(source).find();
EDITAR: Si s2 contiene caracteres especiales de expresiones regulares (de los cuales hay muchos), es importante citarlos primero. Corregí mi respuesta ya que es la primera que la gente verá, pero vote a favor de Matt Quail ya que señaló esto.
Un problema con la respuesta de Dave L. es cuando s2 contiene marcas de expresiones regulares como \d
, etc.
Quieres llamar a Pattern.quote() en s2:
Pattern.compile(Pattern.quote(s2), Pattern.CASE_INSENSITIVE).matcher(s1).find();