1700442977
编写高质量代码:改善Java程序的151个建议 建议59:对字符串排序持一种宽容的心态
1700442978
1700442979
在Java中一涉及中文处理就会冒出很多问题来,其中排序也是一个让人头疼的课题,我们来看下面的代码:
1700442980
1700442981
public static void main(String[]args){
1700442982
1700442983
String[]strs={“张三(Z)”,“李四(L)”,“王五(W)”};
1700442984
1700442985
//排序,默认是升序
1700442986
1700442987
Arrays.sort(strs);
1700442988
1700442989
int i=0;
1700442990
1700442991
for(String str:strs){
1700442992
1700442993
System.out.println((++i)+”、”+str);
1700442994
1700442995
}
1700442996
1700442997
}
1700442998
1700442999
上面的代码定义一个数组,然后进行升序排序,我们期望的结果是按照拼音升序排列,即为李四、王五、张三,但是结果却不是这样的:
1700443000
1700443001
1、张三(Z)
1700443002
1700443003
2、李四(L)
1700443004
1700443005
3、王五(W)
1700443006
1700443007
这是按照什么排序的呀,非常混乱!我们知道Arrays工具类的默认排序是通过数组元素的compareTo方法来进行比较的,那我们来看String类的compareTo的主要实现:
1700443008
1700443009
while(k<lim){
1700443010
1700443011
//原字符串的字符数组
1700443012
1700443013
char c1=v1[k];
1700443014
1700443015
//比较字符串的字符数组
1700443016
1700443017
char c2=v2[k];
1700443018
1700443019
if(c1!=c2){
1700443020
1700443021
//比较两者的char值大小
1700443022
1700443023
return c1-c2;
1700443024
1700443025
}
[
上一页 ]
[ :1.700442976e+09 ]
[
下一页 ]