为了账号安全,请及时绑定邮箱和手机立即绑定

Java 字符串文本规范器复制韩文字符

Java 字符串文本规范器复制韩文字符

慕斯王 2023-02-16 15:39:29
我有一个字符串字符更改项目。当我将以下代码与韩文字符一起使用时,结果字符串具有重复字符。我该如何解决?@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 标准定义了字符之间的两种等价:规范等价和兼容性等价。规范等价是字符或字符序列之间的基本等价。下图说明了这种等效性:

//img1.sycdn.imooc.com//63edddd30001cdbf06540486.jpg

因此,将一个字符变成两个字符是正确的行为。

但是,您选择了 NFD 形式,它已经是“规范分解”。我认为你不必删除\\p{Mn},因为你根本没有得到规范的组成。

NFC 规范分解,然后是规范组合。

NFD 规范分解。

NFKC 兼容性分解,然后是规范组合。

NFKD 兼容性分解。

您的测试假设不正确,输入和输出序列的长度不必相同。


查看完整回答
反对 回复 2023-02-16
  • 1 回答
  • 0 关注
  • 70 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信