举例:"A1,A2,A5,A4,A3,B2,B3,B5,B1,B4,C1,C3,C5,C2"
排序后:"A1,A2,A3,A4,A5,B1,B2,B3,B4,B5,C1,C2,C3,C5"
求助。
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
import java.util.Comparator;
public class Test {
public static void main(String[] args) {
String[] str = "A1,A11,A2,A5,A4,A3,B2,B3,B5,B1,B4,C1,C3,C5,C2".split(",");//先分割出来
//Arrays.sort(str);//从小到大排序,按ACS码值
//重写比较器,定义怎么比较
Arrays.sort(str, new Comparator<String>()
{
@Override
public int compare(String o1, String o2) {
char s1 = o1.charAt(0);//第一个字符
char s2 = o2.charAt(0);
if(s1 == s2){
Integer i1 = Integer.valueOf(o1.substring(1));//取剩下的字符串,也就是数字部分
Integer i2 = Integer.valueOf(o2.substring(1));
return i1.compareTo(i2);
}else{
return o1.compareTo(o2);
}
}
});
String str2 = StringUtils.join(str, ",");//数组转字符串(逗号分隔)
System.out.println(str2);
}
}
测试结果:
字母也是可以比较的 每一个字母都有对应的一个值 ,如果你能确保所有的字符串都是 一个字母+一个数字组成的就比较简单了..把字符串分解然后比较(温馨提示 同一个字母大写和小写的值是不一样的 ,具体值可以百度)
这个我倒是知道通过ascii码来比较,字母有对应的ascii码,数字也有对应的ascii码,都转成ascii码比较是可以的,关键是转成ascii码排序后怎么再转回去呢??
下标啊 和冒泡排序差不多啊 你只是转化字母来比较 其他的操作和冒泡排序差不多啊
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
String[] str = "A1,A2,A5,A4,A3,B2,B3,B5,B1,B4,C1,C3,C5,C2".split(",");//先分割出来
Arrays.sort(str);//从小到大排序,按ACS码值
String str2 = StringUtils.join(str, ",");//数组转字符串(逗号分隔)
System.out.println(str2);
}
}
测试结果:
当然如果数字是多位的,这种排序就会有问题了,需要你自己写排序了