Wie erkennt man, ob eine Zeichenfolge Akzente enthält?

8

Wie kann man wissen, ob eine Zeichenfolge Akzente enthält?

    
Mercer 05.05.2010, 14:56
quelle

3 Antworten

5
%Vor%

Fügen Sie der Liste alle gewünschten Akzente hinzu

    
oedo 05.05.2010, 15:02
quelle
13

Ich denke, das Beste, was Sie tun können, ist einen Normalizer zu verwenden, der Unicode-Zeichen mit Akzenten in zwei separate Zeichen aufteilt. Java enthält dies in der Klasse Normalizer , siehe hier .

Dies wird zum Beispiel geteilt

%Vor%

in

%Vor%

und wird dies für jedes Zeichen tun, das Akzente oder andere diakritische Zeichen ( Ссылка ) hat.

Dann können Sie überprüfen, ob die resultierende CharSequence einige der Akzentzeichen hat (und das wird harte Codierung bedeuten) oder einfach überprüfen, ob die normalisierte Version gleich der Startversion ist, dies bedeutet, dass es nicht ist jedes Zeichen, das zerlegt wurde. Java Normalizer verfügt bereits über diese Funktion in isNormalized(CharSequence src, Normalizer.Form form) , aber Sie sollten die verschiedenen verfügbaren Formulare prüfen, um zu sehen, ob es für Ihre Bedürfnisse geeignet ist.

BEARBEITEN: Wenn Sie nur grundlegende Akzent-Unterstützung benötigen (wie nur è é à à ò ú), können Sie einfach mit der Option oedo gehen, wenn Sie die volle Unterstützung für alle vorhandenen Akzente benötigen verrückt, sie alle hart zu codieren.

    
Jack 05.05.2010 15:02
quelle
5

Der richtige Weg dazu besteht darin, normalize(str,NFD) von java.text.Normalizer zu verwenden und dann die Zeichen der allgemeinen Kategorie Mark \pM oder Non-Spacing Mark \p{Mn} zu löschen. Java unterstützt die Standard-Unicode-Eigenschaft \p{Diacritic} nicht, oder Sie könnten diese verwenden. Beachten Sie, dass nicht alle Diakritika Nicht-Abstandsmarken sind und umgekehrt.

Das ist jedoch wahrscheinlich das Falsche. Wenn Sie versuchen, akzentunabhängige Zeichenfolgensuchen und -vergleiche durchzuführen, sollten Sie die Zeichenfolgen so belassen, wie sie sind. Sie müssen ein UCA-Kollatierungsobjekt mit der Stufe 1 (oder besser: PRIMARY) erstellen und dann Ihre Strings vergleichen. Wenn Strings bei der Primärstärke gleich sind, ignoriert es Dinge wie Akzentmarkierungen.

Hier sind Beispiele in Java, wie man das macht Collator-Klasse der ICU. Wenn Sie geeignete UCA-Collatoren verwenden, müssen Sie nicht normalisieren. sie kümmern sich darum für dich.

Diese Antwort in Perl verwendet zwei UCA-Collator-Objekte, eines mit der primären Stärke, um Akzente für String-Suchen und Vergleiche vollständig zu ignorieren, und ein anderes, das es ermöglicht, Diakritika mit der sekundären Stärke zu unterscheiden, wie es für Unicode normal ist.

    
tchrist 05.03.2011 11:14
quelle

Tags und Links