使用Locale.TRADITIONAL_CHINESE使用Collat​​or进行错误的排序

时间:2018-01-10 07:42:05

标签: java android collator

我想通过中文文本笔划来计算列表,我正在使用该方法创建Collat​​or来实现它,但似乎带有TRADITIONAL_CHINESE的Collat​​or有一些错误。

例如,

 List<String> strList = new List<>();
 strList.add("日");
 strList.add("蘋");
 Collections.sort(strList, new SortChinese());




 class SortChinese implements Comparator<String> {

        public int compare(String obj1, String obj2) {

            Collator collator = Collator.getInstance(Locale.TRADITIONAL_CHINESE);
            collator.setStrength(Collator.PRIMARY);
            return collator.compare(obj1, obj2);

        }
    }
之前:日,苹果

之后:苹,日

预期结果:日,苹

对于中文笔画的任何想法或建议都计算在android中进行排序?

3 个答案:

答案 0 :(得分:1)

您可以删除ShortChinese:

List<String> strList = new List<>();
strList.add("日");
strList.add("蘋"); 

Collator collator = Collator.getInstance(Locale.TRADITIONAL_CHINESE);
collator.setStrength(Collator.PRIMARY);
Collections.sort(strList, collator);

答案 1 :(得分:0)

@ propoLis的代码适用于我(Java 8,Windows)。使用UTF-8编辑和编译。也许你用其他编码编辑了它。

所以请尝试:

strList.add(new String(new int[] {0x65e5}, 0, 1)); // Unicode code points
strList.add(new String(new int[] {0x860b}, 0, 1));

或者

strList.add("\u65e5"); // Unicode UTF-16
strList.add("\u860b");

但是你需要2个错误才能再次接收中文。

答案 2 :(得分:0)

你可以试试这个:

tv.setText (Html.fromHtml(YourText
                + " <font color='"
                + getResources().getColor(R.color.colorAccent) + "'>" + " * "
                + "</font>"));

也许您可以将它添加到您的util类中。

strList.sort((o1, o2) -> compareInChinese(str1, str2));