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

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

我正在看一种算法,它可以在字符之间使用对话(蒂尔德回旋卡雷特乌姆劳特卡隆)和他们“简单”的性格。

例如:

ń  ǹ  ň  ñ  ṅ  ņ  ṇ  ṋ  ṉ  ̈  ɲ  ƞ ᶇ ɳ ȵ  --> n

á --> a

ä --> a

ấ --> a

ṏ --> o

等。

  1. 我想用Java来做这件事,尽管我怀疑它应该是Unicode-y的东西,并且在任何语言中都应该是相当容易做到的。

  2. 目的:方便搜索带有指示符号的单词。例如,如果我有一个网球运动员的数据库,并且输入了Bj rn_Borg,我也会保留Bjorn_Borg,这样如果有人进入Bjorn而不是Bj rn,我就可以找到它。


慕斯709654
浏览 513回答 3
3回答

拉风的咖菲猫

核心java.text包是为了解决这个用例而设计的(匹配字符串而不关心对话、案例等等)。配置Collator排序PRIMARY人物差异。这样,创建一个CollationKey每根绳子。如果所有代码都是用Java编写的,则可以使用CollationKey直接。如果需要将密钥存储在数据库或其他类型的索引中,则可以将其转换为字节数组.这些类使用Unicode标准案例折叠数据,以确定哪些字符是等价的,并支持各种分解战略。Collator&nbsp;c&nbsp;=&nbsp;Collator.getInstance();c.setStrength(Collator.PRIMARY); Map<CollationKey,&nbsp;String>&nbsp;dictionary&nbsp;=&nbsp;new&nbsp;TreeMap<CollationKey,&nbsp;String>(); dictionary.put(c.getCollationKey("Björn"),&nbsp;"Björn");...CollationKey&nbsp;query&nbsp;=&nbsp;c.getCollationKey("bjorn"); System.out.println(dictionary.get(query));&nbsp;//&nbsp;-->&nbsp;"Björn"注意,排序程序是特定于地区的。这是因为“字母顺序”在地区之间是不同的(甚至随着时间的推移,就像西班牙语一样)。这个Collator类使您不必跟踪所有这些规则,并保持它们的最新。

当年话下

它是阿帕奇公域朗从维尔开始。3.1.org.apache.commons.lang3.StringUtils.stripAccents("Añ");回报An
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java