我正在尝试对以下列表进行排序:
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);
}
}
}
答案 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])));