根据String中的数字对String []数组进行排序

时间:2014-11-30 00:28:15

标签: java arrays

我有一个看起来像这样的数组:

array[] = {1c, 13d, 11d, 10d, 1h, 13h, 5s, 2s, 12d}

我想根据数组中的数字对数组进行排序所以最终的结果是:

{1c, 1h, 2s, 5s, 10d, 11d, 12d, 13d, 13h}

有办法吗?

2 个答案:

答案 0 :(得分:1)

想想你如何用纸和笔(没有电脑)做到这一点。你有可能:

  • 浏览数组的每个元素,并将其转换为整数(即​​删除非数字字符)
  • 对生成的仅整数数组或列表进行排序。提示:Collections.sort()是你的朋友:)

答案 1 :(得分:1)

执行此操作的最佳方法是实施Comparator界面。当您决定如何比较字符串时,可以使用Arrays类中的实用程序方法。这是一个完整的工作示例。

import java.util.Arrays;
import java.util.Comparator;


public class Foo {

    public static void main(String[] args) {

        String[] myArray = {"1c", "13d", "11d", "10d", "1h", "13h", "5s", "2s", "12d"};

        System.out.println(Arrays.toString(myArray));

        Arrays.sort(myArray, new Comparator<String>() {
            @Override
            public int compare(String one, String two) {

                int oneNum = Integer.parseInt(one.substring(0, one.length() - 1));
                int twoNum = Integer.parseInt(two.substring(0, two.length() - 1));

                char oneChar = one.charAt(one.length() - 1);
                char twoChar = two.charAt(two.length() - 1);

                if (oneNum < twoNum) {
                    return -1;
                } else if (oneNum == twoNum) {
                    if (oneChar < twoChar) {
                        return -1;
                    } else if (oneChar == twoChar){
                        return 0;
                    } else {
                        return 1;
                    }
                } else {
                    return 1;
                }
            }
        }
    );

    System.out.println(Arrays.toString(myArray));   

    }

}