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

2024-12-01 22:13:28
推荐回答(3个)
回答1:

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 strs = new ArrayList();
strs.add("aa2");
strs.add("aa100");
strs.add("aa1");
strs.add("aa10");
strs.add("aa78");
System.out.println(strs);
// 用了一个Comparetor
Comparator com = new Comparator() {
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);
}
}

回答2:

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 shuzi[i] = Integer.valueOf(str[i].substring(zifuNum));
}
Arrays.sort(shuzi);
for(int i=0;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
请按任意键继续. . .

说明:
字母长度相同才行...

回答3:

格式固定是几个字母+几位数字吗?如果是还好办,怕的是形如这样的:aa10x58ydg92cbi9....