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?

¿Fue útil?

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("");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top