Android比较特殊字母

有没有办法在Android中正确sorting国际string? 我使用自定义比较器和compareTo()方法,但这对我来说还不够。 我想要这样的字母“ö”显示在“o”附近,但是他们都在列表的末尾。 我怎么能迫使比较者认为他们类似于“o,a等…”?

Solutions Collecting From Web of "Android比较特殊字母"

要区分语言环境的stringcomaprision使用Collator 。 从文档:

执行区域设置敏感的string比较。 具体的子类RuleBasedCollat​​or允许通过使用规则集来自定义sorting规则sorting。

比较string的例子:

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

打印1


如果你想使用上面的collat​​or对string列表进行sorting,你可以写:

 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ęść]