Android比较特殊字母

lom*_*mza 7 java sorting android comparator

有没有办法在Android中正确排序国际字符串?我使用自定义比较器和compareTo()方法,但这对我来说还不够.我希望像"ö"这样的字母显示在"o"附近,但所有字母都在列表的末尾.如何强制比较器认为它们与"o,a等"相似?

Xae*_*ess 16

对语言环境敏感的字符串comaprision使用Collator.来自docs:

执行区分区域敏感的字符串比较.具体的子类RuleBasedCollat​​or允许通过使用规则集来自定义排序规则排序.

比较字符串的示例:

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

打印1.


如果要使用上面的collat​​or对字符串列表进行排序,可以编写:

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

打印:

[Äther, können, kreativ, Österreich, über, zahlen]
Run Code Online (Sandbox Code Playgroud)

编辑:刚发现你是波兰人,所以波兰人的例子如下:

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???]
Run Code Online (Sandbox Code Playgroud)