字符串排序,字符串是汉字、数字混合的,想按照汉字排了再按照数字排,如何做呢?

zaokong 2011-01-05 11:05:52
字符串排序,字符串是汉字、数字混合的,想按照汉字排了再按照数字排,如何做呢?
...全文
332 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
chen7788 2011-01-05
  • 打赏
  • 举报
回复
个人思路:

先把汉字和数字取出来分别放进数组里面,
把汉字转换成拼音,再根据拼音首字母排序,再排序数字。
chen7788 2011-01-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 a2s3d4f5g_2001 的回复:]
把字符都转换成ascII码 再排序。。。
[/Quote]

那么数字呢?把汉字转换成 ASCII 码了,怎么跟数字排序啊?
排序完了岂乱序了。
shaosijun2004 2011-01-05
  • 打赏
  • 举报
回复
每个字符都有 唯一的unicode
字符数字 是 48~57
cheniqit1 2011-01-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zaokong 的回复:]

汉字也可以转换成ascII码吗?
[/Quote]
这个当然
zaokong 2011-01-05
  • 打赏
  • 举报
回复
汉字也可以转换成ascII码吗?
a2s3d4f5g_2001 2011-01-05
  • 打赏
  • 举报
回复
把字符都转换成ascII码 再排序。。。
zaokong 2011-01-05
  • 打赏
  • 举报
回复
北京杂志第1期,北京杂志第2期,北京杂志第3期,北京杂志第4期,北京杂志第5期,北京杂志第6期,北京杂志第11期,北京杂志第12期,北京杂志第13期,北京杂志第14期,北京杂志第15期....就按照这个顺序来排
wander_java 2011-01-05
  • 打赏
  • 举报
回复
怎么越看越乱呢,先是汉字,数字,这怎么又字母和数字了呢,为什么想那么麻烦呢,按位比,第一位相同比第二位,第二位相同比第三位,谁大排后边这就是你所说的后边一种,按常规排


按大小非呢就多出一步判断。同样是先比第一位,相同比第二位再想同比第三位,第三位不同的话拿第二位+第三位一起判断,如果都是数字就排序就行了,不是数字那就再比第三位的顺序
yaoweijq 2011-01-05
  • 打赏
  • 举报
回复
给个最贴近实际的例子和想要的结果么
[Quote=引用 20 楼 zaokong 的回复:]
感谢yaoweijq,字符串有可能不含数字,数字有可能在字符串的任意位置,一个字符串还有可能有多个数字。。。请您不吝赐教!
[/Quote]
zaokong 2011-01-05
  • 打赏
  • 举报
回复
感谢yaoweijq,字符串有可能不含数字,数字有可能在字符串的任意位置,一个字符串还有可能有多个数字。。。请您不吝赐教!
yaoweijq 2011-01-05
  • 打赏
  • 举报
回复
楼主只举了没有bug例子
可能有bug的例子也是一样的思想
只不过得用正则迭代了
[Quote=引用 18 楼 aaby167 的回复:]
引用 17 楼 yaoweijq 的回复:

Java code
public static void main(String[] args) throws Exception {
String []gg = new String[]{"a2","a20","a1","a11","b10","b112","c10","c2","c1","b1","b2"};
K []k = new K[……
[/Quote]
aaby167 2011-01-05
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 yaoweijq 的回复:]

Java code
public static void main(String[] args) throws Exception {
String []gg = new String[]{"a2","a20","a1","a11","b10","b112","c10","c2","c1","b1","b2"};
K []k = new K[gg.length]……
[/Quote]
单纯的数字+字母 或 字母+数字可以
遇到数字+字母+数字+字母就很有bug
yaoweijq 2011-01-05
  • 打赏
  • 举报
回复
public static void main(String[] args) throws Exception {
String []gg = new String[]{"a2","a20","a1","a11","b10","b112","c10","c2","c1","b1","b2"};
K []k = new K[gg.length];
for(int i=0;i<gg.length;i++) {
k[i] = new K(gg[i]);
}
java.util.Arrays.sort(k);
for(K kk:k) {
System.out.print(kk.getS()+" ");
}
}
class K implements java.lang.Comparable<K> {
public K(String ss) {
this.s = ss;
}
private String s;
public String getS() {
return s;
}
public int compareTo(K o) {
String ss = o.getS();
String ss_string = ss.replaceAll("[\\d]+", "");
String s_string = s.replaceAll("[\\d]+", "");
if(s_string.compareTo(ss_string) != 0) {
return s_string.compareTo(ss_string);
}else {
int s_int = Integer.parseInt(s.replaceAll("[\\D]+", ""));
int ss_int = Integer.parseInt(ss.replaceAll("[\\D]+", ""));
return s_int - ss_int;
}
}

}

程序中的可能异常自己处理吧
zaokong 2011-01-05
  • 打赏
  • 举报
回复
刚才的例子没说清楚,继续举例子:a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14....按照常规的名字排序是:a1,a10,a11,a12,a13,a14,a2,a3,a4,a5,a6,a7,a8,a9....现在客户想要的是不仅仅按照名称排序,还得按照名称里面的数字进行排序:a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14....
zaokong 2011-01-05
  • 打赏
  • 举报
回复
那就是a1,a1a1,a2
aaby167 2011-01-05
  • 打赏
  • 举报
回复
还真是蛋疼的排序啊
要是a1,a2,a1a1怎么排?
happyfmy 2011-01-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zaokong 的回复:]
举个例子来说吧:a1,a2,a11...给这三个排序,按照常规的名称排序,得到的是:a1,a11,a2。。现在我想得到的是a1,a2,a11。。。继续等待大侠救命
[/Quote]
二级排序 一级根据长度排 再根据常规名字排序
以前写ACM的时候这样的题目很多
zaokong 2011-01-05
  • 打赏
  • 举报
回复
举个例子来说吧:a1,a2,a11...给这三个排序,按照常规的名称排序,得到的是:a1,a11,a2。。现在我想得到的是a1,a2,a11。。。继续等待大侠救命
aaby167 2011-01-05
  • 打赏
  • 举报
回复
不知道你的汉字要按什么顺序排
如果不是按拼音 只是按unicode码来排的话
就是把字符串的字符一个个读出来
转成String
存到TreeSet里面
把TreeSet反着读出来 就好了
chen_du 2011-01-05
  • 打赏
  • 举报
回复
刚刚看了一下 个人思路是:
把汉字,字母,数字分别提取到不同的数组中
然后分别排序:
汉字按拼音首字母排序的方法 请参照 :http://www.dalianxxg.cn/it/web/2010/0426/660.html
字母排序就根据 ASCII值进行排序
数字排序就不说了

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧