2015-09-22 21 views
5

Ich versuche, alle lateinischen Unicode-Zeichen in ihre [a-z] Darstellungenwie Latin Unicode-Zeichen [az] Zeichen ersetzen

ó --> o 
í --> i 

ich eins nach dem anderen tun, zum Beispiel leicht zu konvertieren:

myString = myString.replaceAll("ó","o"); 

aber da es Tonnen von Variationen gibt, ist dieser Ansatz nur unpraktisch

Gibt es eine andere Möglichkeit, es in Java zu tun? zum Beispiel ein regular Expression oder ein utility library

USE CASE:

1- Städtenamen aus anderen Sprachen in Englisch z.B.

Espírito Santo -> Espirito Santo,

+0

http://stackoverflow.com/a/25057742/984823 Aber immer noch bewusst sein, von einigen Ausnahmen wie l-Takt. –

+0

Dies ist ein sehr primitiver Ansatz für Ihren Anwendungsfall. Im Deutschen kann in Situationen, in denen nur ASCII angezeigt werden kann, nach dem Zeichen ein Umlaut durch ein e ersetzt werden, z. München wird München. Und der tatsächliche englische Name dieser Stadt ist München. Ich würde vorschlagen, lass die Akzente einfach stehen. Wenn Ihre Anwendung diese Akzente nicht anzeigen kann, ist Ihre Anwendung schrecklich kaputt. – roeland

+0

@roeland Ja das verstehe ich, das Problem ist, dass sich München in vielen verschiedenen Sprachen vorstellt, jede Sprache hat es anders. Jetzt stell dir vor, dass in großen Datenmengen versucht wird, all diese Daten zu analysieren ... nun, die Art, wie ich denke, könnte uns nicht die richtige Stadt geben, aber sie versucht sie zumindest zu "normalisieren" (es gibt ein Sprichwort, wenn die Rate ist über 80% ist es gut genug). das ist, was wir anstreben – nafas

Antwort

7

Diese Antwort erfordert Java 1.6 oder höher, die java.text.Normalizer zugegeben.

String normalized = Normalizer.normalize(input, Normalizer.Form.NFD); 
    String accentRemoved = normalized.replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); 

Beispiel:

public class Main { 
    public static void main(String[] args) { 
     String input = "Árvíztűrő tükörfúrógép"; 
     System.out.println("Input: " + input); 
     String normalized = Normalizer.normalize(input, Normalizer.Form.NFD); 
     System.out.println("Normalized: " + normalized); 
     String accentRemoved = normalized.replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); 
     System.out.println("Result: " + accentRemoved); 
    } 
} 

Ergebnis:

Input: Árvíztűrő tükörfúrógép 
Result: Arvizturo tukorfurogep 
+0

@JoopEggen Ich weiß nicht, wie es funktioniert, ich weiß nur, es funktioniert :) – EpicPandaForce

+1

@EpicPandaForce Ich versuche nicht, sie durch "" .für Beispiel I zu ersetzen will "í" mit "i" repalieren – nafas

+1

Das erste normalize ersetzt einzelnes char 'í' durch ASCII' i' plus null-width '''. Dann werden alle diese Akzente, die diakritische Zeichen kombinieren, gelöscht. Bleiben die ASCII-Buchstaben. D in NFD steht für Decompose. –

Verwandte Themen