有没有办法在 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/