2012-10-02 21 views
12

Ho un metodo Java che cerca una parola all'interno di una frase che ignori la distinzione tra maiuscole e minuscole della parola e, se trova la parola, la rimuove dalla frase. La parola e la frase possono essere qualsiasi cosa. Sono una variante. Ecco il mio codice:"(? I)" non funziona con gli accenti

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

Le cose funzionano perfettamente, a meno che la parola non abbia un accento. Ad esempio se la parola è "álvarez" e la frase è "Frase Álvarez", quindi non funzionerà in quanto "(? I)" non funziona in quel caso.

C'è un modo per far funzionare "(? I)" con caratteri accentati?

risposta

25

basta sostituire con (? Iu) - si accenderà unicode case-insensitive corrispondenza

+4

Mi piace il tuo migliore del mio. Avere un +1 :) –

+0

@DavidGrant Oh, grazie –

+0

@ Konstantin .. Che semplicità! ... Grazie :) – Brad

4

Per impostazione predefinita, (?i) funziona solo con caratteri ASCII - vedere Pattern.CASE_INSENSITIVE per i dettagli. È possibile combinare che contrassegna con UNICODE_CASE insieme in questo modo: (? I)

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

Esempio non funziona per me. L'esempio in basso lo fa. –

+0

@DuncanJones: risolto - grazie. –

+2

@ David ... Grazie David. +1 per il tuo +1 per la soluzione Konstantin :) ... Buon spirito. – Brad

Problemi correlati