我有一個字符串字符更改項目。當我將以下代碼與韓文字符一起使用時,結果字符串具有重復字符。我該如何解決?@Testpublic void testKoreanCharacters() { String test = "????"; String replacedStr = Normalizer.normalize(test, Normalizer.Form.NFD).replaceAll("\\p{Mn}", ""); Assert.assertEquals(test.length(),replacedStr.length());}輸出:java.lang.AssertionError: Expected :4Actual :8
1 回答

德瑪西亞99
TA貢獻1770條經(jīng)驗 獲得超3個贊
日語字符代表音節(jié),而不是單音。因此,大多數(shù)字符代表兩個或三個“拉丁”字符。1 Introduction
請參閱Unicode Norma 部分的第一個黃色塊
Unicode 標準定義了字符之間的兩種等價:規(guī)范等價和兼容性等價。規(guī)范等價是字符或字符序列之間的基本等價。下圖說明了這種等效性:
因此,將一個字符變成兩個字符是正確的行為。
但是,您選擇了 NFD 形式,它已經(jīng)是“規(guī)范分解”。我認為你不必刪除\\p{Mn}
,因為你根本沒有得到規(guī)范的組成。
NFC 規(guī)范分解,然后是規(guī)范組合。
NFD 規(guī)范分解。
NFKC 兼容性分解,然后是規(guī)范組合。
NFKD 兼容性分解。
您的測試假設不正確,輸入和輸出序列的長度不必相同。
添加回答
舉報
0/150
提交
取消