¿Cómo comprobar si una cadena contiene otra cadena sin distinguir entre mayúsculas y minúsculas en Java?

Resuelto Aaron asked hace 16 años • 19 respuestas

Digamos que tengo dos cuerdas,

String s1 = "AbBaCca";
String s2 = "bac";

Quiero realizar una devolución de cheque que s2se 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?

Aaron avatar Sep 18 '08 02:09 Aaron
Aceptado

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.

Dave L. avatar Sep 17 '2008 19:09 Dave L.

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();
Matt Quail avatar Sep 18 '2008 07:09 Matt Quail