按字母顺序排序时忽略变音符号
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);
然后将按字母顺序对名称进行排序。您可能需要使用 collator.setStrength(SECONDARY) 让它“忽略”由于重音引起的差异。这种行为是特定于语言的,所以我不能确定。
【讨论】:
以上是关于按字母顺序排序时忽略变音符号的主要内容,如果未能解决你的问题,请参考以下文章