2012-10-02 20 views
12

Tengo un método Java que busca una palabra dentro de una frase ignorando la mayúscula y minúscula de la palabra, y si encuentra la palabra, la elimina de la frase. La palabra y la frase pueden ser cualquier cosa. Ellos son una variante. Aquí está mi código:"(? I)" no funciona con acentos

private String removeWord(String phrase, String word) { 
    phrase = phrase.replaceAll("(?i)" + word , ""); 
    return phrase; 
} 

Las cosas funcionan perfectamente, a menos que la palabra tenga acento. Por ejemplo, si la palabra es "álvarez" y la frase es "Álvarez frase", entonces no funcionará como "(? I)" no funciona en ese caso.

¿Hay alguna manera de hacer que "(? I)" funcione con caracteres acentuados?

Respuesta

25

basta con sustituir con (? Iu) - se encenderá entre mayúsculas y minúsculas Unicode juego

+4

Me gusta el tuyo mejor que el mío. Tener un +1 :) –

+0

@DavidGrant Oh, gracias –

+0

@ Konstantin .. ¡Qué fácil! ... Gracias :) – Brad

4

Por defecto (?i) funciona solo con caracteres ASCII - vea Pattern.CASE_INSENSITIVE para más detalles. Se puede combinar esa bandera con UNICODE_CASE juntos de esta manera: (? I)

phrase = Pattern.compile(word, UNICODE_CASE | CASE_INSENSITIVE).matcher(phrase).replaceAll(""); 
+0

ejemplo superior no funciona para mí. El ejemplo inferior lo hace. –

+0

@DuncanJones: arreglado, gracias. –

+2

@David ... Gracias David. +1 para su +1 para la solución de Konstantin :) ... Buen espíritu. – Brad

Cuestiones relacionadas