String字符串 数字+英文字符组合,如何排序(字母按A-Z,数字按从小到大)

举例:"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);
    }
}

 

测试结果:

当然如果数字是多位的,这种排序就会有问题了,需要你自己写排序了