在Java中我们常用compareTo来比较两个对象的大小,如:
String a = "a";
String b = "b";
System.out.println(a.compareTo(b)); //-1
在比较的字符串是英文字符时,这种方法是正确的。但如果是中文字符,如:
String c = "啊啊";
String d = "啊吧";
System.out.println(c.compareTo(d)); //291
这是因为这个方法会将两个字符串都转化为char类型,再去逐位比较其ASCII码的大小,ASCII码是英文字符的编码,而中文字符的编码主要采用的是GBK。
因此在比较中文字符串大小的时候不能直接使用compareTo方法。
可使用Collator类来解决这个问题:
该类会根据语言环境进行String的比较,使用静态工厂方法 getInstance 来为给定的语言环境获得适当的 Collator 对象。
具体代码如下:
//创建中文语言环境的整理对象
Collator collator = Collator.getInstance(Locale.CHINA);
//CollationKey是Collator用来将String元素转换成可以彼此比较位的类
CollationKey collationC = collator.getCollationKey(c);
CollationKey collationD = collator.getCollationKey(d);
System.out.println(collator.compare(collationC.getSourceString(), collationD.getSourceString())); //-1
网友评论