Java版本号排序 [英] Java version number sort
本文介绍了Java版本号排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
String[] k1 = {"0.10", "0.2", "0.1", "0", "1.10", "1.2", "1.1", "1", "2.10", "2", "2.2", "2.1"};
double[] k2 = {0.10, 0.2, 0.1, 0, 1.10, 1.2, 1.1, 1, 2.10, 2, 2.2, 2.1};
Arrays.sort(k1);
Arrays.sort(k2);
System.out.println(Arrays.toString(k1));
System.out.println(Arrays.toString(k2));
输出:
[0, 0.1, 0.10, 0.2, 1, 1.1, 1.10, 1.2, 2, 2.1, 2.10, 2.2]
[0.0, 0.1, 0.1, 0.2, 1.0, 1.1, 1.1, 1.2, 2.0, 2.1, 2.1, 2.2]
我想要的东西,
[0, 0.1, 0.2, 0.10, 1, 1.1, 1.2, 1.10, 2, 2.1, 2.2, 2.10]
小数点之前和之后的第一个排序。像1、1.1、1.2、1.10、2、2.1等。
First sort before decimals and after. Like 1, 1.1, 1.2, 1.10, 2, 2.1, etc.
如何为此编写比较器?
How can I write a comparator for this?
推荐答案
2.1, 2.2, 2.10]
由于2.10的顺序大于2.2,因此看起来像是版本号排序:
Since 2.10 is greater than 2.2 in this order it looks like a version number sort:
import java.util.Arrays;
import java.util.Comparator;
public class VersionNumberComparator implements Comparator<String> {
@Override
public int compare(String version1, String version2) {
String[] v1 = version1.split("\\.");
String[] v2 = version2.split("\\.");
int major1 = major(v1);
int major2 = major(v2);
if (major1 == major2) {
return minor(v1).compareTo(minor(v2));
}
return major1 > major2 ? 1 : -1;
}
private int major(String[] version) {
return Integer.parseInt(version[0]);
}
private Integer minor(String[] version) {
return version.length > 1 ? Integer.parseInt(version[1]) : 0;
}
public static void main(String[] args) {
String[] k1 = { "0.10", "0.2", "0.1", "0", "1.10", "1.2", "1.1", "1",
"2.10", "2", "2.2", "2.1" };
Arrays.sort(k1, new VersionNumberComparator());
System.out.println(Arrays.asList(k1));
}
}
这篇关于Java版本号排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文