我有一個(gè)字符串字符更改項(xiàng)目。當(dāng)我將以下代碼與韓文字符一起使用時(shí),結(jié)果字符串具有重復(fù)字符。我該如何解決?@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貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊
日語字符代表音節(jié),而不是單音。因此,大多數(shù)字符代表兩個(gè)或三個(gè)“拉丁”字符。1 Introduction
請(qǐng)參閱Unicode Norma 部分的第一個(gè)黃色塊
Unicode 標(biāo)準(zhǔn)定義了字符之間的兩種等價(jià):規(guī)范等價(jià)和兼容性等價(jià)。規(guī)范等價(jià)是字符或字符序列之間的基本等價(jià)。下圖說明了這種等效性:
因此,將一個(gè)字符變成兩個(gè)字符是正確的行為。
但是,您選擇了 NFD 形式,它已經(jīng)是“規(guī)范分解”。我認(rèn)為你不必刪除\\p{Mn}
,因?yàn)槟愀緵]有得到規(guī)范的組成。
NFC 規(guī)范分解,然后是規(guī)范組合。
NFD 規(guī)范分解。
NFKC 兼容性分解,然后是規(guī)范組合。
NFKD 兼容性分解。
您的測(cè)試假設(shè)不正確,輸入和輸出序列的長度不必相同。
添加回答
舉報(bào)
0/150
提交
取消