java数字字母混合字符串排序

java中,怎么将aa10 aa11 aa2 aa1排序成aa1 aa2 aa10 aa11?

希望方法有普遍性,适用于aa是任何字母的~
其实是文件地址,要比较好几组
字母很长,一组内字母是一样的
组之间字母不相同,长度也不一样
数字是0-30排序

请大家不用回答了,感谢两位回答的朋友,但只能给一人分数。。我只能比较一下,谢谢

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Sorter {
public static void main(String[] args) {
List<String> strs = new ArrayList<String>();
strs.add("aa2");
strs.add("aa100");
strs.add("aa1");
strs.add("aa10");
strs.add("aa78");
System.out.println(strs);
// 用了一个Comparetor
Comparator<String> com = new Comparator<String>() {
public int compare(String o1, String o2) {
// 前面3个IF主要是判空的
if (o1 == o2) {
return 0;
}
if (o1 == null) {
return 1;
}
if (o2 == null) {
return -1;
}
// 这里没有做太多的判断, index 代表第几个开始是数字, 直接从后面遍历
// 比如 aa11, 我们就会判断从下标[2]开始为不是数字, 就直接截取 [2] 后面, 即11
int index = 0;
for (index = o1.length() - 1; index >= 0
&& (o1.charAt(index) >= '0' && o1.charAt(index) <= '9'); index--)
;
int num1 = Integer.parseInt(o1.substring(index + 1));

for (index = o2.length() - 1; index >= 0
&& (o2.charAt(index) >= '0' && o2.charAt(index) <= '9'); index--)
;
int num2 = Integer.parseInt(o2.substring(index + 1));
return num1 - num2;
}
};
Collections.sort(strs, com);
System.out.println(strs);
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-12-05
import java.util.Arrays;

public class Paixu
{
static String[] strAfter;

static int paixu(String[] str){
String zifu;
int zifuNum;
int[] shuzi;
zifu = (str[0].split("[0-9]",2))[0];
zifuNum = zifu.length();
shuzi = new int[str.length];
strAfter = new String[str.length];
for(int i=0;i<str.length;i++){
shuzi[i] = Integer.valueOf(str[i].substring(zifuNum));
}
Arrays.sort(shuzi);
for(int i=0;i<str.length;i++){
strAfter[i] = zifu + shuzi[i];
System.out.println(strAfter[i]);
}
return str.length;
}
public static void main(String[] args){
String[] str = {"asd123","asf3434","asd12","asd0"};
new Paixu().paixu(str);
}
}

输出:
asd0
asd12
asd123
asd3434
请按任意键继续. . .

说明:
字母长度相同才行...
第2个回答  2009-12-05
格式固定是几个字母+几位数字吗?如果是还好办,怕的是形如这样的:aa10x58ydg92cbi9....