Usando el método replace(CharSequence target, CharSequence replacement)
en String, ¿cómo puedo hacer que el objetivo no distinga entre mayúsculas y minúsculas?
Por ejemplo, la forma en que funciona en este momento:
String target = "FooBar";
target.replace("Foo", "") // would return "Bar"
String target = "fooBar";
target.replace("Foo", "") // would return "fooBar"
¿Cómo puedo hacer que reemplazar (o si hay un método más adecuado) no distingue entre mayúsculas y minúsculas para que ambos ejemplos devuelvan "Bar"?
target.replaceAll("(?i)"+Pattern.quote("foo"), "");
Si no te importa el caso, entonces quizás no importa si devuelve todo en mayúsculas:
fuente
Tal vez no sea tan elegante como otros enfoques, pero es bastante sólido y fácil de seguir, especialmente. para personas más nuevas en Java. Una cosa que me sorprende de la clase String es esta: ha existido durante mucho tiempo y, aunque admite un reemplazo global con regexp y un reemplazo global con Strings (a través de CharSequences), este último no tiene un parámetro booleano simple : 'isCaseInsensitive'. Realmente, habrías pensado que con solo agregar ese pequeño interruptor, todos los problemas que su ausencia causa especialmente para los principiantes podrían haberse evitado. Ahora en JDK 7, String still no admite esta pequeña adición!
Bueno, de todos modos, dejaré de agarrarme. Para todos los más nuevos en Java, aquí está su deus ex machina de cortar y pegar . Como dije, no es tan elegante y no te dará ningún premio de codificación, pero funciona y es confiable. Cualquier comentario, no dude en contribuir. (Sí, lo sé, StringBuffer es probablemente una mejor opción para administrar las líneas de mutación de cadena de dos caracteres, pero es bastante fácil intercambiar las técnicas).
fuente
Las expresiones regulares son bastante complejas de administrar debido al hecho de que algunos caracteres están reservados: por ejemplo,
"foo.bar".replaceAll(".")
produce una cadena vacía, porque el punto significa "cualquier cosa". Si desea reemplazar solo el punto debe indicarse como parámetro"\\."
.Una solución más simple es usar objetos StringBuilder para buscar y reemplazar texto. Se necesitan dos: uno que contiene el texto en minúscula, mientras que el segundo contiene la versión original. La búsqueda se realiza en el contenido en minúsculas y el índice detectado también reemplazará el texto original.
fuente
Para caracteres no Unicode:
fuente
org.apache.commons.lang3.StringUtils:
cadena estática pública replaceIgnoreCase (texto de cadena, cadena de búsqueda String, reemplazo de cadena)
Las mayúsculas y minúsculas reemplazan todas las ocurrencias de una Cadena dentro de otra Cadena.
fuente
Me gusta la respuesta de smas que se usa con una expresión regular. Si va a hacer el mismo reemplazo muchas veces, tiene sentido precompilar la expresión regular una vez:
replaceAll
fuente
Simplemente hazlo simple sin bibliotecas de terceros:
fuente