我有一个字符串字符更改项目。当我将以下代码与韩文字符一起使用时,结果字符串具有重复字符。我该如何解决?@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条经验 获得超3个赞
日语字符代表音节,而不是单音。因此,大多数字符代表两个或三个“拉丁”字符。1 Introduction
请参阅Unicode Norma 部分的第一个黄色块
Unicode 标准定义了字符之间的两种等价:规范等价和兼容性等价。规范等价是字符或字符序列之间的基本等价。下图说明了这种等效性:
因此,将一个字符变成两个字符是正确的行为。
但是,您选择了 NFD 形式,它已经是“规范分解”。我认为你不必删除\\p{Mn}
,因为你根本没有得到规范的组成。
NFC 规范分解,然后是规范组合。
NFD 规范分解。
NFKC 兼容性分解,然后是规范组合。
NFKD 兼容性分解。
您的测试假设不正确,输入和输出序列的长度不必相同。
添加回答
举报
0/150
提交
取消