Android比较特殊字母

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

    对语言环境敏感的字符串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")); 

    打印1


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

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

    整理器也应该在分解策略旁边设置强度:

     final Collator collator = Collator.getInstance(); collator.setDecomposition(Collator.CANONICAL_DECOMPOSITION); collator.setStrength(Collator.SECONDARY); 

    Collator.CANONICAL_DECOMPOSITIONCollator.SECONDARY力量需要对口音/变音符号进行排序; 如果要对基于unicode的字符进行排序,则完全分解会很有用; 但这会降低排序速度并需要更多内存。