【获取最大软件版本号】
Maven 版本号定义,<主版本>.<次版本>.<增量版本>-<里程碑版本>
举例3.1.4-beta 其中,主版本和次版本都是必须的,主版本,次版本,增量版本由多位数字组成,可能包含前导零,里程碑版本由字符串组成。
<主版本>.<次版本>.<增量版本>:基于数字比较
里程碑版本:基于字符串比较,采用字典序
比较版本号时,按从左到右的顺序依次比较。
基于数字比较, 只需比较忽略任何前导零后的整数值 。
输入2个版本号,输出最大版本号。
代码实现:
import java.util.Scanner;
public class OdAb12 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入版本号1:");
String version1 = scanner.nextLine();
System.out.print("请输入版本号2:");
String version2 = scanner.nextLine();
String maxVersion = getMaxVersion(version1, version2);
System.out.println("Max version number is: " + maxVersion);
}
// 获取最大版本号的方法
private static String getMaxVersion(String version1, String version2) {
// 将版本号转换成数组,方便比较每个部分的大小
String[] arr1 = version1.split("\\.");
String[] arr2 = version2.split("\\.");
int i = 0;
// 每次循环比较一个位置上的数字
while (i < arr1.length && i < arr2.length) {
// 如果是里程碑版本,则直接比较字符串大小
if (arr1[i].contains("-") || arr2[i].contains("-")) {
int compareResult = arr1[i].compareTo(arr2[i]);
if (compareResult > 0) {
return version1;
} else if (compareResult < 0) {
return version2;
}
} else { // 否则按照数字大小比较
int num1 = Integer.parseInt(arr1[i]);
int num2 = Integer.parseInt(arr2[i]);
if (num1 > num2) {
return version1;
} else if (num1 < num2) {
return version2;
}
}
i++;
}
// 如果前面所有位置上的数字都相等,则长度较长的版本号更大
while (i < arr1.length) {
if (!arr1[i].equals("0")) {
return version1;
}
i++;
}
while (i < arr2.length) {
if (!arr2[i].equals("0")) {
return version2;
}
i++;
}
// 如果两个版本号完全相等,则返回任意一个即可
return version1;
}
}