2010-11-08 11 views
28

Possibili duplicati:
Remove diacritical marks (ń ǹ ň ñ ṅ ņ ṇ ṋ ṉ ̈ ɲ ƞ ᶇ ɳ ȵ) from Unicode chars
Is there a way to get rid of accents and convert a whole string to regular letters?Java cambiamento áéőűú a aeouu

Come posso fare questo? Grazie per l'aiuto

+1

duplicato: http://stackoverflow.com/questions/1453171/nnn-or-remove-diacritical-marks-da –

+0

Vedere http://stackoverflow.com/questions/1453171/nnn-or-remove-diacritical -marks-from – softveda

+0

@Greg che è una domanda .net –

risposta

7

Primo: non dovresti. Questi simboli hanno proprietà fonetiche speciali che non dovrebbero essere ignorati.

Il modo per convertirli è quello di creare un Map che contiene ogni coppia:

Map<Character, Character> map = new HashMap<Character, Character>(); 
map.put('á', 'a'); 
map.put('é', 'e'); 
//etc.. 

e poi avvolgere il caratteri della stringa, la creazione di una nuova stringa chiamando map.get(currentChar)

+5

+1 per * non si dovrebbe * –

+1

un altro +1 per * non dovrebbe *. Un sostituto di "ä" in lingua tedesca sarebbe "ae" (sorpresa: due caratteri ...) e scommetto che ci sono molti altri esempi per altre lingue parlate. –

+2

@Andreas true, immagino che chieda una funzione di normalizzazione specifica della locale (buona fortuna con quello :-)). –

9

È possibile utilizzare java.text.Normalizer per separare le lettere di base e segni diacritici, quindi rimuovere quest'ultimo tramite un regexp:

public static String stripDiacriticas(String s) { 
    return Normalizer.normalize(s, Form.NFD) 
     .replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); 
} 
+0

Ho usato qualcosa di simile a fare il lavoro: Pattern.compile ("\\ p {InCombiningDiacriticalMarks} +"). Matcher (nfdNormalizedString) .replaceAll (""); –

87

Penso che il tuo qu estion è la stessa come questi:

e quindi la risposta è anche lo stesso:

String convertedString = 
     Normalizer 
      .normalize(input, Normalizer.Form.NFD) 
      .replaceAll("[^\\p{ASCII}]", ""); 

Vedi

Esempio di codice:

final String input = "Tĥïŝ ĩš â fůňķŷ Šťŕĭńġ"; 
System.out.println(
    Normalizer 
     .normalize(input, Normalizer.Form.NFD) 
     .replaceAll("[^\\p{ASCII}]", "") 
); 

uscita:

Questa è una stringa funky

01.235.
+0

+1, ottima risposta. – aioobe

+1

fortunatamente ho appena dovuto copiarlo e incollarlo da una domanda precedente (incluso il primo paragrafo) :-) –

+0

Scusa ma è in Android, non solo java, la classe normalizzatore non è nei sistemi Android – lacas