我想通过中文文本笔划来计算列表,我正在使用该方法创建Collator来实现它,但似乎带有TRADITIONAL_CHINESE的Collator有一些错误。
例如,
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中进行排序?
答案 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));