0

我想按中文文本笔画数对列表进行排序,我正在使用创建 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);

        }
    }

之前:天,苹果</p>

之后:苹果,日</p>

预期结果:日,伟</p>

在android中对中文笔画进行排序有什么想法或建议吗?

4

3 回答 3

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);
于 2018-01-10T09:13:21.040 回答
1

你可以试试这个:

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

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

public static int compareInChinese(String str1, String str2) {
    Collator collator = Collator.getInstance(new Locale("zh", "CN"));
    collator.setDecomposition(Collator.NO_DECOMPOSITION);
    collator.setStrength(Collator.PRIMARY);
    return collator.compare(str1, str2);
}
于 2018-02-22T06:09:47.343 回答
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 个错误才能再次接收中文。

于 2018-01-10T09:40:23.170 回答