2017-11-26 6 views
1

Ich benutze Netbeans, um eine Java-Software zu schreiben. Als Teil des Debuggens meines Codes blieb ich in der folgenden Ausgabe stecken. Ich habe einen Code, der zwei arabische Buchstaben vergleicht, die genau gleich aussehen. Ich habe die Briefe aus meiner Datenbank kopiert. Ich habe erwartet, dass der Code sie gleich findet, aber nicht. Unten ist mein Code:Zwei exakt gleiche arabische Buchstaben "wie sie erscheinen" sind nicht gleich in NetBeans

String a = "و"; 
    String b ="و"; 
    System.out.println(a.equals(b)); 

Hinweis: Wenn ich den Brief mit der Tastatur schreiben erhalte ich eine Ausgabe von „wahr“ ist, aber wenn ich es aus der Datenbank auf die Variablen „a“ und „b“ kopieren. Die Ausgabe ist falsch. Warum?

+0

Ist es das gleiche Zeichen? CodePoint Vergleich https://docs.oracle.com/javase/6/docs/api/java/lang/Character.html#codePointAt%28java.lang.CharSequence,%20int%29 –

+0

Zeigen Sie uns den Code, der die Werte lädt aus der Datenbank ist wahrscheinlich ein Problem. Auch wenn Sie uns eine Paste des Wertes von der DB zeigen können. – prettyvoid

Antwort

0

Vergleichen von Unicode-Zeichen ist nicht übermäßig schwer, aber ist mehr beteiligt als was Sie tun.

Sie haben zwei Glyphen kopiert und eingefügt. Glyphen sind grafische Darstellungen von Codepunkten. Manchmal sind die Glyphen ähnlich (oder identisch), wenn die Codepunkte unterschiedlich sind. In einem solchen Fall werden Sie den Test nicht bestehen, wenn es scheint, dass es bestanden haben sollte.

Dies kann aus einer Reihe von Gründen geschehen. Ein häufiger Schuldiger ist, dass dein Charakter "komponiert" ist. Um einige Systeme zu unterstützen, könnte ein Zeichen tatsächlich aus einem primären Codepunkt bestehen, mit einem zusätzlichen Codepunkt, der es modifiziert. (Denken Sie an einen gebräuchlichen lateinischen Buchstaben mit einem Akzent, der als zweiter Codepunkt kodiert ist). Unicode unterstützt dies, aber es verfügt auch über einen Codepoint für die gleiche Kombination in Kombination mit einem Zeichen.

Für andere Sprachen gibt es möglicherweise andere ähnliche Regeln, die den Codepunktvergleich von .equals(...) fehlschlagen lassen, wenn die Glyphendarstellung identisch zu sein scheint.

0

try den Unicode-Wert für die beiden Zeichen zu bekommen und deinen Charakter zu vereinigen, können Sie den nächsten Link zu finden verwenden, welches Zeichen Sie http://jrgraphix.net/r/Unicode/0600-06FF

06C4 und 0648 haben die gleiche Zeichendarstellung verwenden wollen

Verwandte Themen