按数字升序排列字符串列表,包含多个小数

时间:2014-07-17 15:20:50

标签: java sorting

我正在尝试对以下列表进行排序:

2.1.0.0
2.1.1.0
2.1.11.0
2.1.12.0
2.1.13.0
2.1.14.0
2.1.15.0
2.1.2.0
2.1.3.0
2.1.4.0
2.1.5.0
2.1.6.0
2.1.7.0
2.1.8.0
2.1.9.0

要获得以下列表:

2.1.0.0
2.1.1.0
2.1.2.0
2.1.3.0
2.1.4.0
2.1.5.0
2.1.6.0
2.1.7.0
2.1.8.0
2.1.9.0
2.1.11.0
2.1.12.0
2.1.13.0
2.1.14.0
2.1.15.0

我试图通过该顺序的第二个小数之后的内容对此进行排序。我试过Arrays.sort但是没有成功。这是我的代码

import java.util.Arrays;

public class NewSort {

    public static void main(String[] args) {
        String[] numbers = { "2.1.0.0", "2.1.1.0", "2.1.11.0", "2.1.12.0",
                "2.1.13.0", "2.1.14.0", "2.1.15.0", "2.1.2.0", "2.1.3.0",
                "2.1.4.0", "2.1.5.0", "2.1.6.0", "2.1.7.0", "2.1.8.0",
                "2.1.9.0" };

        Arrays.sort(numbers);

        for (String number : numbers) {
            System.out.println(number);
        }
    }

}

1 个答案:

答案 0 :(得分:2)

  

我试图按照该顺序在第二个小数之后的内容对此进行排序。

您可以自己编写Comparator

enum MyStringComparator implements Comparator<String> {
    INSTANCE;

    @Override
    public int compare(String s1, String s2) {
        int n1 = Integer.parseInt(s1.split("\\.")[2]);
        int n2 = Integer.parseInt(s2.split("\\.")[2]);
        return Integer.compare(n1, n2);
    }
}

现在:

String[] numbers = { "2.1.0.0", "2.1.1.0", "2.1.11.0", "2.1.12.0",
        "2.1.13.0", "2.1.14.0", "2.1.15.0", "2.1.2.0", "2.1.3.0",
        "2.1.4.0", "2.1.5.0", "2.1.6.0", "2.1.7.0", "2.1.8.0",
        "2.1.9.0" };

Arrays.sort(numbers, MyStringComparator.INSTANCE);

for (String number : numbers) {
    System.out.println(number);
}
2.1.0.0
2.1.1.0
2.1.2.0
2.1.3.0
2.1.4.0
2.1.5.0
2.1.6.0
2.1.7.0
2.1.8.0
2.1.9.0
2.1.11.0
2.1.12.0
2.1.13.0
2.1.14.0
2.1.15.0

我会留给您使用您可能需要的任何错误检查机制。


在Java 8中,它更容易:

Arrays.sort(numbers,
            Comparator.comparingInt(s -> Integer.parseInt(s.split("\\.")[2])));