2 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
您的字符串資源還有一個(gè)不可見的 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。
我在比較阿拉伯語字符串時(shí)遇到了類似的問題。在我的例子中,隱形字符是 U+200E LEFT-TO-RIGHT MARK。
在比較字符串之前,我從它們中刪除了這個(gè)字符。您還可以修剪 POP DIRECTIONAL FORMATTING。您也可以嘗試使用十六進(jìn)制編輯器從資源文件中刪除此字符。
如果鏈接不起作用,請對您的字符串進(jìn)行 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
我對希伯來語不太了解,但我認(rèn)為您將來也會遇到另一個(gè)問題。在你的話中,第一個(gè)字母有兩個(gè)修飾語:U+05B0 HEBREW POINT SHEVA 和 0+05C1 HEBREW POINT SHIN DOT。盡管下面的兩個(gè)字母看起來完全一樣,但它們并不相等。修飾符以不同的順序編寫。
??? : U+05E9 + U+05B0 + U+05C1
??? : U+05E9 + U+05C1 + U+05B0
我在阿拉伯語上遇到了類似的問題。即使認(rèn)為下面的兩個(gè)詞看起來相同,它們也不等于彼此。U+064E ARABIC FATHA 和 U+0651 ARABIC SHADDA 以不同的順序書寫。
??? : U+0631 + U+064E + U+0651
??? : U+0631 + U+0651 + U+064E
對于阿拉伯語,在我的打字稿項(xiàng)目中,我編寫了一個(gè)實(shí)用方法來在比較字符串之前對其進(jìn)行規(guī)范化。規(guī)范化方法刪除所有 LEFT-TO-RIGHT MARK 字符并以標(biāo)準(zhǔn)方式重新排列修飾符字符。我認(rèn)為您可能需要為希伯來語做類似的事情。
@Elias N指出,Java 已經(jīng)有一種規(guī)范化字符串的方法。此方法不會刪除 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貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊
IDE 默認(rèn)字符集是“CP1252”。所以它將無法讀取這個(gè)非英文字符。您的 IDE 是否支持 UTF-8 字符集,如果是,那么它應(yīng)該返回 true。就像,如果我將此代碼復(fù)制到 Eclipse(通過將日志更改為 sysout),那么它對我有用。
添加回答
舉報(bào)