|
@@ -1,11 +1,20 @@
|
|
|
package com.qmth.boot.data.upgrade.utils;
|
|
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+
|
|
|
import java.util.Comparator;
|
|
|
|
|
|
public class VersionComparator implements Comparator<String> {
|
|
|
|
|
|
@Override
|
|
|
public int compare(String v1, String v2) {
|
|
|
+ if (!VersionComparator.isValidVersion(v1)) {
|
|
|
+ throw new IllegalArgumentException("版本号" + v1 + "格式不正确,格式如:数字.数字.数字!");
|
|
|
+ }
|
|
|
+ if (!VersionComparator.isValidVersion(v2)) {
|
|
|
+ throw new IllegalArgumentException("版本号" + v2 + "格式不正确,格式如:数字.数字.数字!");
|
|
|
+ }
|
|
|
+
|
|
|
// 分割版本号为数字段
|
|
|
String[] parts1 = v1.split("\\.");
|
|
|
String[] parts2 = v2.split("\\.");
|
|
@@ -15,14 +24,35 @@ public class VersionComparator implements Comparator<String> {
|
|
|
|
|
|
for (int i = 0; i < maxLength; i++) {
|
|
|
// 处理长度不一致的情况,缺失段视为0
|
|
|
- int num1 = (i < parts1.length) ? Integer.parseInt(parts1[i]) : 0;
|
|
|
- int num2 = (i < parts2.length) ? Integer.parseInt(parts2[i]) : 0;
|
|
|
+ int num1 = (i < parts1.length) ? parseNumber(parts1[i]) : 0;
|
|
|
+ int num2 = (i < parts2.length) ? parseNumber(parts2[i]) : 0;
|
|
|
|
|
|
if (num1 != num2) {
|
|
|
return Integer.compare(num1, num2);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+ public static int parseNumber(String str) {
|
|
|
+ try {
|
|
|
+ return Integer.parseInt(str);
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ throw new IllegalArgumentException("字符串" + str + "转换为数字失败!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验版本号,格式如:数字.数字.数字
|
|
|
+ */
|
|
|
+ public static boolean isValidVersion(String version) {
|
|
|
+ if (StringUtils.isBlank(version)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ // String regex = "\\d+\\.\\d+\\.\\d+";
|
|
|
+ String regex = "\\d+(\\.\\d+)*$";
|
|
|
+ return version.matches(regex);
|
|
|
+ }
|
|
|
+
|
|
|
}
|