2017-11-26 12 views
1

Netbeansを使用してJavaソフトウェアを作成しています。私のコードのデバッグの一環として、次の問題に悩まされました。まったく同じように見える2つのアラビア文字を比較するコードがあります。私は自分のデータベースから手紙をコピーしました。私はそれらのコードが同等であることを期待していましたが、そうではありません。私は、データベースから変数「A」と「B」にコピーしたときに、私はキーボードを使って文字を書くとき、私は「真」の出力を得るが、:NetBeansで「表示されているとおりに」同じ2つのアラビア文字が等しくない

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

注:以下は私のコードです。出力はfalseです。どうして? 2つの文字のUnicode値を取得し、あなたのキャラクターを統一する

+0

同じ文字ですか?コードポイントの比較https://docs.oracle.com/javase/6/docs/api/java/lang/Character.html#codePointAt%28java.lang.CharSequence,%20int%29 –

+0

値をロードしているコードを表示しますデータベースから問題が発生している可能性があります。また、dbからの値のペーストを表示することもできます。 – prettyvoid

答えて

0

Unicode文字を比較するのは難しくありませんが、あなたがやっていることよりも複雑です。

2つのグリフをコピーして貼り付けました。グリフは、コードポイントのグラフィカル表現です。コードポイントが異なると、グリフが似ている(または同一である)ことがあります。そのような場合、合格したと思われるときには.equals(...)テストに失敗します。

これは、さまざまな理由で発生します。頻繁な原因は、あなたのキャラクターが "作曲"されていることです。いくつかのシステムをサポートするために、キャラクタは実際にはプライマリコードポイントで構成され、それを変更するコードポイントが追加されます。 (2番目のコードポイントとしてエンコードされたアクセント付きの一般的なラテン文字を考えてください)。 Unicodeはこれをサポートしていますが、同じ組み合わせのコードポイントも1文字として組み合わせています。

その他の言語については、グリフ表現が同一であると思われるコードポイント比較.equals(...)が失敗する他の同様の規則が存在することがあります。

0

試みは、あなたが http://jrgraphix.net/r/Unicode/0600-06FF

06C4および0648は、同じ文字表現を持って使用したいどの文字を見つけるために、次のリンクを使用することができます

関連する問題