java - Android比较特殊字母

标签 java android sorting comparator

有没有办法在 Android 中正确排序国际字符串?我使用自定义比较器和 compareTo() 方法,但这对我来说还不够。我希望像“ö”这样的字母显示在“o”附近,但它们都在列表的末尾。我怎样才能强制比较器认为它们类似于“o、a 等……”?

最佳答案

要对语言环境敏感的字符串进行比较,请使用 Collator .来自文档:

Performs locale-sensitive string comparison. A concrete subclass, RuleBasedCollator, allows customization of the collation ordering by the use of rule sets.

比较字符串的例子:

 Collator deCollator = Collator.getInstance(Locale.GERMANY); // or new Locale("pl", "PL") for polish locale ;)
 System.out.println(deCollator.compare("abcö", "abco"));

打印1


如果你想使用上面的整理器对字符串列表进行排序,你可以这样写:

final List<String> strings = Arrays.asList(
        "über", "zahlen", "können", "kreativ", "Äther", "Österreich");
Collections.sort(strings, deCollator); // Collator implements Comparator
System.out.println(strings);

打印:

[Äther, können, kreativ, Österreich, über, zahlen]

编辑:刚刚发现您是波兰人,所以下面是波兰语示例:

final List<String> strings = Arrays.asList(
        "pięć", "piec", "Pieczka", "pięść", "pieczęć", "pieczątka");
Collections.sort(strings, Collator.getInstance(new Locale("pl", "PL")));
System.out.println(strings);
// output: [piec, pieczątka, pieczęć, Pieczka, pięć, pięść]

关于java - Android比较特殊字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9377229/

相关文章:

java - 表示日历对象的最佳规范字符串?

java - Do-while 问题 java

Android:是否在本地存储数据?

android - java.lang.RuntimeException : view android. widget.RelativeLayout 正在添加,但它已经有父级

Java,按自定义字母顺序对arraylist进行排序

java - java中验证日期

java - 我是 Camel 框架的新手,我尝试使用一个程序将文件从一个目录复制到另一个目录,但在运行该程序时出现以下错误

android - 在Android Studio中添加依赖项时出错

python - 在次二次时间内找到两个排序数组的最大兼容值的最大总和

javascript - 在由元素 :position pairs 组成的字典中移动元素