【问题标题】:Ignoring diacritics when ordering alphabetically按字母顺序排序时忽略变音符号
【发布时间】:2011-04-06 14:14:05
【问题描述】:
我正在制作一个 Java 应用程序,它从 SQLite 接收一些名称并将它们放在一个列表框中。
问题是我希望它以字母升序的方式准确排序(具体来说是葡萄牙语)。
这些条目,例如:
测试版
阿里达
安娜
应按以下顺序订购:
安娜
阿里达
测试版
但由于它以某种 ASCII 顺序进行排序,因此“重音”字符将被抛出到末尾,而不是它们对应的字母的正下方。
结果:
安娜
贝塔
阿里达
我该如何解决这个问题?编辑:我的意思是用 Java 本身解决问题,而不是用 SQlite 改进
提前致谢。
【问题讨论】:
标签:
java
internationalization
collation
diacritics
【解决方案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) 让它“忽略”由于重音引起的差异。这种行为是特定于语言的,所以我不能确定。