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
}
1700443026
1700443027
k++;
1700443028
1700443029
}
1700443030
1700443031
上面的代码先取得字符串的字符数组,然后一个一个地比较大小,注意这里是字符比较(减号操作符),也就是UNICODE码值的比较,查一下UNICODE代码表,“张”的码值是5F20,而“李”是674E,这样一看,“张”排在“李”的前面也就很正确了—但这明显与我们的意图冲突了。这一点在JDK文档中也有说明:对于非英文的String排序可能会出现不准确的情况。那该如何解决这个问题呢?Java推荐使用Collator类进行排序,那好,我们把代码修改一下:
1700443032
1700443033
public static void main(String[]args)throws Exception{
1700443034
1700443035
String[]strs={“张三(Z)”,“李四(L)”,“王五(W)”};
1700443036
1700443037
//定义一个中文排序器
1700443038
1700443039
Comparator c=Collator.getInstance(Locale.CHINA);
1700443040
1700443041
//升序排列
1700443042
1700443043
Arrays.sort(strs, c);
1700443044
1700443045
int i=0;
1700443046
1700443047
for(String str:strs){
1700443048
1700443049
System.out.println((++i)+”、”+str);
1700443050
1700443051
}
1700443052
1700443053
}
1700443054
1700443055
输出结果如下:
1700443056
1700443057
1、李四(L)
1700443058
1700443059
2、王五(W)
[
上一页 ]
[ :1.70044301e+09 ]
[
下一页 ]