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

Qos*_*smo 5 java collation diacritics internationalization

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

这些条目,例如:

BetaÁridaAna

应订购如下:

AnaÁridaBeta

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

结果:AnaBetaÁrida

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

提前致谢.

mdm*_*dma 7

您可以先将名称读入常规名称List<String>,然后使用该名称Collections.sort()进行排序.要指定区域设置敏感的排序,请使用Collat​​or.

例如

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

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