因为linux没有gb2312字符集,所以你调用getBytes()就会有异常的。其实你这个排序是没有什么意义的,因为这个排序是按照字符编码的16进制数大小来排的,对于中文来说没有意义。这样还不如直接使用unicode的大小来排呢!
解决方案 »
- 请教:导出excel问题
- Source not found for ApplicationFilterChain.internalDoFilter报错
- 带宽+服务器怎么设置最有效?
- 请问struts2 list内嵌套Set集合如何实现表单多行套多行提交?
- java报表问题
- 怎么样把javabean里的结果集显示到页面上?
- 免费jsp空间收集
- <jsp:getProperty name="userInfor" property="*"/> 出错!!(在线等待)
- 一个关于文本框的怪问题
- 请教各位大帅:jswdk中运行jsp,为何客户端浏览器无内容,查看原代码,就是原文件?
- 重装系统后,重新配置,原来可以用的网站数据库连接出问题了,为什么?
- 请问哪位有jspsmart及相关文档,万分感谢!!
你的这个排序是按照byte位数来排的,真不明白为什么这么排,真没什么意义补充一下
你的语句应该都是执行到这里面了
catch (UnsupportedEncodingException ex) {
return 0;
}
我是想按照中文音序排列
在linux下面并没有报错
并且还能把转换成字节数组的长度打印出来呢,只是两种环境下长度不同
windows下面:
北京 length=4 中国 length=4
buf1[0]=-79 buf2[0]=-42
中国 length=4 亚运会 length=6
buf1[0]=-42 buf2[0]=-47
北京 length=4 亚运会 length=6
buf1[0]=-79 buf2[0]=-47linux下面:
北京 length=6 中国 length=5
buf1[0]=-95 buf2[0]=63
中国 length=5 亚运会 length=7
buf1[0]=63 buf2[0]=63
buf1[1]=63 buf2[1]=63
buf1[2]=63 buf2[2]=63
buf1[3]=-88 buf2[3]=63
public class SortComparator implements Comparator{
public int compare(Object o1,Object o2) {
try{
byte[] buf1 = ((String) o1).getBytes("unicode");
byte[] buf2 = ((String) o2).getBytes("unicode");
int size = Math.min(buf1.length, buf2.length);
for (int i = 0; i < size; i++) {
if (buf1[i] < buf2[i])
return -1;
else if (buf1[i] > buf2[i])
return 1;
}
return buf1.length - buf2.length;
}catch(UnsupportedEncodingException ex) {
return 0;
}
}
}调用:
String[] str = {"北京","中国","亚运会"};
Arrays.sort(str,new SortComparator());