“(?i)” no funciona con tildes
-
12-12-2019 - |
Pregunta
Tengo un método Java que busca una palabra dentro de una frase ignorando la distinción entre mayúsculas y minúsculas de la palabra y, si encuentra la palabra, la elimina de la frase.La palabra y la frase pueden ser cualquier cosa.Son variantes.Aquí está mi código:
private String removeWord( String phrase, String word ) {
phrase = phrase.replaceAll( "(?i)" + word , "" );
return phrase;
}
Las cosas funcionan perfecto, a menos que la palabra tenga tilde.Por ejemplo si la palabra es "álvarez" y la frase es "frase de Álvarez", entonces no funcionará ya que "(?i)" no funciona en ese caso.
¿Hay alguna manera de hacer que "(?i)" funcione con caracteres acentuados?
Solución
¡Simplemente reemplace (? I) con (? IU): se encenderá en Unicode, una coincidencia insensible a la caja
Otros consejos
Por defecto (?i)
sólo funciona con caracteres ASCII - ver Patrón.CASE_INSENSITIVE para detalles.Podrías combinar esa bandera con UNICODE_CASE de esta manera:
phrase = Pattern.compile(word, UNICODE_CASE | CASE_INSENSITIVE).matcher(phrase).replaceAll("");