2 回答

TA貢獻1827條經驗 獲得超8個贊
您的字符串資源還有一個不可見的 Unicode 字符。
這是您在資源上的字符串:https ://www.fontspace.com/unicode/analyzer/?q=%D7%A9%D6%B0%D7%81%D7%91%D6%B8%D7%98%E2 %80%交流
這是您的代碼字符串:https ://www.fontspace.com/unicode/analyzer/?q=%D7%A9%D6%B0%D7%81%D7%91%D6%B8%D7%98
額外的字符是 U+202C POP DIRECTIONAL FORMATTING。
我在比較阿拉伯語字符串時遇到了類似的問題。在我的例子中,隱形字符是 U+200E LEFT-TO-RIGHT MARK。
在比較字符串之前,我從它們中刪除了這個字符。您還可以修剪 POP DIRECTIONAL FORMATTING。您也可以嘗試使用十六進制編輯器從資源文件中刪除此字符。
如果鏈接不起作用,請對您的字符串進行 unicode 分析:
U+05E9 HEBREW LETTER SHIN
U+05B0 HEBREW POINT SHEVA
U+05C1 HEBREW POINT SHIN DOT
U+05D1 HEBREW LETTER BET
U+05B8 HEBREW POINT QAMATS
U+05D8 HEBREW LETTER TET
U+202C POP DIRECTIONAL FORMATTING //only on resource file
我對希伯來語不太了解,但我認為您將來也會遇到另一個問題。在你的話中,第一個字母有兩個修飾語:U+05B0 HEBREW POINT SHEVA 和 0+05C1 HEBREW POINT SHIN DOT。盡管下面的兩個字母看起來完全一樣,但它們并不相等。修飾符以不同的順序編寫。
??? : U+05E9 + U+05B0 + U+05C1
??? : U+05E9 + U+05C1 + U+05B0
我在阿拉伯語上遇到了類似的問題。即使認為下面的兩個詞看起來相同,它們也不等于彼此。U+064E ARABIC FATHA 和 U+0651 ARABIC SHADDA 以不同的順序書寫。
??? : U+0631 + U+064E + U+0651
??? : U+0631 + U+0651 + U+064E
對于阿拉伯語,在我的打字稿項目中,我編寫了一個實用方法來在比較字符串之前對其進行規范化。規范化方法刪除所有 LEFT-TO-RIGHT MARK 字符并以標準方式重新排列修飾符字符。我認為您可能需要為希伯來語做類似的事情。
@Elias N指出,Java 已經有一種規范化字符串的方法。此方法不會刪除 POP DIRECTIONAL FORMATTING 或 LEFT-TO-RIGHT MARK。
String a = "???"; //U+05E9 + U+05B0 + U+05C1
String b = "???"; //U+05E9 + U+05C1 + U+05B0
String nomrA = java.text.Normalizer.normalize(a, java.text.Normalizer.Form.NFC);
String nomrB = java.text.Normalizer.normalize(b, java.text.Normalizer.Form.NFC);
assertFalse("Original strings are not equal.", a.equals(b));
assertTrue("Normalized strings are equal.", normA.equals(normB));

TA貢獻1862條經驗 獲得超6個贊
IDE 默認字符集是“CP1252”。所以它將無法讀取這個非英文字符。您的 IDE 是否支持 UTF-8 字符集,如果是,那么它應該返回 true。就像,如果我將此代碼復制到 Eclipse(通過將日志更改為 sysout),那么它對我有用。
添加回答
舉報