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

时间:2010-09-01 02:35:51

标签: java internationalization collation diacritics

我正在创建一个Java应用程序,它从SQLite接收一些名称并将它们放在列表框中。 问题是我希望它按照字母顺序升序准确地排序(葡萄牙语具体而言)。

这些条目,例如:

β 有田 安娜

应按以下方式订购:

安娜 有田 贝塔

但是由于它以某种ASCII顺序排序,所以“重音”字符将在最后而不是在它们对应的字母下面抛出。

结果: 安娜 Beta版 有田

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

提前致谢。

2 个答案:

答案 0 :(得分:7)

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

E.g

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

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

答案 1 :(得分:2)

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