我正在使用Netbeans编写一个java软件。作为调试代码的一部分,我遇到了以下问题。我有一个代码,比较两个似乎完全相同的阿拉伯字母。我复制了数据库中的字母。我希望代码能够找到它们相同,但它并没有。以下是我的代码:
String a = "و";
String b ="و";
System.out.println(a.equals(b));
注意:当我使用键盘写字母时,我得到" true"的输出,但是当我将它从数据库复制到变量" a"和" b"。输出为false。为什么呢?
答案 0 :(得分:0)
比较Unicode字符并不是太难,但比你正在做的更为复杂。
您已复制并粘贴了两个字形。字形是代码点的图形表示。有时,当代码点不同时,字形相似(或相同)。在这种情况下,当.equals(...)
测试看起来应该已经通过时,你将无法通过。
这可能由于多种原因而发生。一个常见的罪魁祸首是你的角色是“组成的”。为了支持某些系统,一个字符实际上可能由一个主代码点组成,并有一个额外的代码点来修改它。 (想象一下常见的拉丁字母,其重音被编码为第二个代码点)。 Unicode支持这一点,但它也有一个代码点,用于组合为一个字符的相同组合。
对于其他语言,可能还有其他类似的规则,当字形表示看起来相同时,.equals(...)
的代码点比较失败。