簡體   English   中英

Java字符串文本規范器重復韓文字符

[英]Java string text normalizer dublicate korean character

我有一個字符串字符更改項目。 當我使用以下帶有韓文字符的代碼時,結果字符串具有重復字符。 我該如何解決?

@Test
public 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 :4
Actual   :8

日語字符代表音節,而不是單個語音。 因此,大多數字符代表兩個或三個“拉丁”字符。 請參閱 Unicode Norma 的1 Introduction部分的第一個黃色塊

Unicode 標准定義了字符之間的兩個等價:規范等價和兼容性等價。 規范等價是字符或字符序列之間的基本等價。 下圖說明了這種等價關系:

在此處輸入圖片說明

因此,從一個字符中提取兩個字符是正確的行為。

但是,您選擇了 NFD 形式,該形式已經稱為“規范分解”。 我認為您不必刪除\\\\p{Mn} ,因為您根本沒有得到規范的組成。

NFC 規范分解,然后是規范組合。

NFD 規范分解。

NFKC 兼容性分解,然后是規范組合。

NFKD 兼容性分解。

您測試假設不正確,輸入和輸出序列的長度不必相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM