如何按特定数据段对数组进行排序?

时间:2014-08-01 13:32:10

标签: java arrays

我有一个像这样的字符串数组:

String[] array = { "CC/2", "DDD/3", "AAAA/4", "B/1" };
Arrays.sort(array);
System.out.println(Arrays.toString(array));

当我执行此代码时,我得到以下内容:

[AAAA/4, B/1, CC/2, DDD/3]

这是正确的,但我想用编号的值对其进行排序,以便得到以下结果:

[B/1, CC/2, DDD/3, AAAA/4]

我该怎么做?

5 个答案:

答案 0 :(得分:4)

您可以使用Comparator<String>

这样做
    /* You may found some shortcuts for this
       but following code is easy to understand 
    */
    String[] array = { "CC/2", "DDD/3", "AAAA/4", "B/1"};
    Arrays.sort(array, new Comparator<String>() {

        public int compare(String o1, String o2) {
            int i1,i2;
            /* 
               You should add some checks like 
               1] null check
               or 
               2] whether String contains / or not etc before going for further 
               code.
            */
            /* Get Numbers from String To compare */
            i1=Integer.valueOf(o1.split("/")[1]);
            i2=Integer.valueOf(o2.split("/")[1]);
            //May throw NumberFormatException so be careful with this

            if(i1>i2)
                return 1;
            else if(i1<i2)
                return -1;
            else
                return 0;
        }
    });
    System.out.println(Arrays.toString(array));//Print array

答案 1 :(得分:2)

您需要自定义Comparator

Comparator<String> c = new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return s1.split("/")[1].compareTo(s2.split("/")[1]);
    }
};
String[] array = { "CC/2", "DDD/3", "AAAA/4", "B/1" };
Arrays.sort(array, c);
System.out.println(Arrays.toString(array));

这会打印[B/1, CC/2, DDD/3, AAAA/4]

答案 2 :(得分:2)

使用自定义Comparator并删除数字前的字符,如下所示:

Arrays.sort(array, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        return o1.replaceAll("[A-Z]+/", "").compareTo(o2.replaceAll("[A-Z]+/", ""));
    }
});

.replaceAll("[A-Z]+/", "")部分删除了您的潜在CC/AAAA/,依此类推;假设您的字符串始终以至少一个大写字母开头,后跟斜杠(/)。

答案 3 :(得分:0)

在Arrays类中查看sort(T [] a,Comparator c):http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html

自定义比较器可能就是您想要的

答案 4 :(得分:0)

您必须自己制作排序功能。如果数字始终位于字符串的末尾,则可以使用

来反转字符串

StringBuilder().reverse().toString()

然后你可以像以前那样对它们进行排序,然后将它们反转。这将使您按照数字的顺序为您提供字符串,但如果您有多个具有相同编号的字符串,则会向后排序。