按字母顺序排序时忽略变音符号

Posted

技术标签:

【中文标题】按字母顺序排序时忽略变音符号【英文标题】:Ignoring diacritics when ordering alphabetically 【发布时间】:2011-04-06 14:14:05 【问题描述】:

我正在制作一个 Java 应用程序,它从 SQLite 接收一些名称并将它们放在一个列表框中。 问题是我希望它以字母升序的方式准确排序(具体来说是葡萄牙语)。

这些条目,例如:

测试版 阿里达 安娜

应按以下顺序订购:

安娜 阿里达 测试版

但由于它以某种 ASCII 顺序进行排序,因此“重音”字符将被抛出到末尾,而不是它们对应的字母的正下方。

结果: 安娜 贝塔 阿里达

我该如何解决这个问题?编辑:我的意思是用 Java 本身解决问题,而不是用 SQlite 改进

提前致谢。

【问题讨论】:

【参考方案1】:

将java.text.Collator 传递给您的字符串排序例程。

【讨论】:

【参考方案2】:

您可以先将名称读入常规List<String>,然后使用Collections.sort() 对列表进行排序。要指定区分区域设置的顺序,请使用Collator。

例如

List<String> names = ... read names from db;
Collator collator = Collator.getInstance(new Locale("pt"));
Collections.sort(names, collator);

然后将按字母顺序对名称进行排序。您可能需要使用 collat​​or.setStrength(SECONDARY) 让它“忽略”由于重音引起的差异。这种行为是特定于语言的,所以我不能确定。

【讨论】:

以上是关于按字母顺序排序时忽略变音符号的主要内容,如果未能解决你的问题,请参考以下文章

将单词与特殊字符(é、è、...)进行比较时忽略变音符号

排序(字母顺序)以忽略空单元格:dataTables

iPhone CoreData:使用变音符号排序

使用二进制排序规则有啥影响?

mysql查询选择喜欢带有变音符号的土耳其字母

删除变音符号,某些字母上的某些变音符号除外