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

从Unicode字符中删除Diacritic标记(ńǹňṅņṇṋṉ̈ɲƞᶇɳȵ)

从Unicode字符中删除Diacritic标记(ńǹňṅņṇṋṉ̈ɲƞᶇɳȵ)

慕斯709654 2019-07-10 15:40:21
从Unicode字符中删除Diacritic标记(ńǹňṅņṇṋṉ̈ɲƞᶇɳȵ)我正在看一种算法,它可以在字符之间使用对话(蒂尔德, 回旋, 卡雷特, 乌姆劳特, 卡隆)和他们“简单”的性格。例如:ń  ǹ  ň  ñ  ṅ  ņ  ṇ  ṋ  ṉ  ̈  ɲ  ƞ ᶇ ɳ ȵ  --> ná --> aä --> aấ --> aṏ --> o等。我想用Java来做这件事,尽管我怀疑它应该是Unicode-y的东西,并且在任何语言中都应该是相当容易做到的。目的:方便搜索带有指示符号的单词。例如,如果我有一个网球运动员的数据库,并且输入了Bj rn_Borg,我也会保留Bjorn_Borg,这样如果有人进入Bjorn而不是Bj rn,我就可以找到它。
查看完整描述

3 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

核心java.text包是为了解决这个用例而设计的(匹配字符串而不关心对话、案例等等)。

配置Collator排序PRIMARY人物差异。这样,创建一个CollationKey每根绳子。如果所有代码都是用Java编写的,则可以使用CollationKey直接。如果需要将密钥存储在数据库或其他类型的索引中,则可以将其转换为字节数组.

这些类使用Unicode标准案例折叠数据,以确定哪些字符是等价的,并支持各种分解战略。

Collator c = Collator.getInstance();c.setStrength(Collator.PRIMARY);
Map<CollationKey, String> dictionary = new TreeMap<CollationKey, String>();
dictionary.put(c.getCollationKey("Björn"), "Björn");...CollationKey query = c.getCollationKey("bjorn");
System.out.println(dictionary.get(query)); // --> "Björn"

注意,排序程序是特定于地区的。这是因为“字母顺序”在地区之间是不同的(甚至随着时间的推移,就像西班牙语一样)。这个Collator类使您不必跟踪所有这些规则,并保持它们的最新。


查看完整回答
反对 回复 2019-07-10
?
当年话下

TA贡献1890条经验 获得超9个赞

它是阿帕奇公域朗从维尔开始。3.1.

org.apache.commons.lang3.StringUtils.stripAccents("Añ");

回报An


查看完整回答
反对 回复 2019-07-10
  • 3 回答
  • 0 关注
  • 509 浏览

添加回答

举报

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