在显示结果时,按汉字的拼音首字母排序显示。
问题描述:
直接用compare排序的结果不符合预期,应该是按Unicode编码排序的
原因分析:
Java使用Unicode编码,其中中文Unicode字符集来源于GB18030,GB18030又由GB2312发展起来。
GB2312 是一个包含 7000 多个字符的字符集,它按拼音排序,并且是连续的,之后的 GBK、GB2312 都是在此基础上扩充而来,所以要让它们完整排序难上加难了。
但如果排序对象是经常使用的汉字,使用Collator类排序完全可以满足我们的要求。
解决方案:
用Collator类重写Comparator类中的compare方法:
Collections.sort(testList, new Comparator(){ @Override public int compare(String o1, String o2){ return Collator.getInstance(Locale.CHINESE).compare(o1, o2); } });
其中,Collator(整理器)类:
public abstract class Collator extends Object implements Comparator
Collator(整理器)类执行区分语言环境的String比较,
对于所给的语言环境,使用静态工厂方法 getInstance 获取对应的Collator对象
// Compare two strings in the default locale Collator myCollator = Collator.getInstance(Locale.CHINESE); if( myCollator.compare("啊", "这") < 0 ) System.out.println("啊 比 这 小"); else System.out.println("啊 比 这 大");
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)