61 lines
2.3 KiB
Java
61 lines
2.3 KiB
Java
package quant.rich.emoney.util;
|
|
|
|
import java.util.Comparator;
|
|
|
|
public class VersionComparator implements Comparator<String> {
|
|
|
|
public static VersionComparator INSTANCE = new VersionComparator();
|
|
|
|
@Override
|
|
public int compare(String version1, String version2) {
|
|
// 将版本号拆分为数字部分(以 '.' 为分隔符)
|
|
String[] version1Parts = version1.split("\\.");
|
|
String[] version2Parts = version2.split("\\.");
|
|
|
|
// 找到较长的版本号长度
|
|
int length = Math.max(version1Parts.length, version2Parts.length);
|
|
|
|
for (int i = 0; i < length; i++) {
|
|
// 如果 version1Parts 或 version2Parts 长度不足,补齐为 0
|
|
try {
|
|
int v1 = (i < version1Parts.length) ? Integer.parseInt(version1Parts[i]) : 0;
|
|
int v2 = (i < version2Parts.length) ? Integer.parseInt(version2Parts[i]) : 0;
|
|
|
|
// 比较版本号的每一部分
|
|
if (v1 < v2) {
|
|
return -1; // version1 小于 version2
|
|
} else if (v1 > v2) {
|
|
return 1; // version1 大于 version2
|
|
}
|
|
}
|
|
catch (NumberFormatException e) {
|
|
// 转换数字失败的直接调用 String 的 compare
|
|
String v1 = (i < version1Parts.length) ? version1 : "";
|
|
String v2 = (i < version2Parts.length) ? version2 : "";
|
|
return v1.compareTo(v2);
|
|
}
|
|
}
|
|
// 如果各部分都相等
|
|
return 0; // version1 等于 version2
|
|
}
|
|
|
|
public static void main(String[] args) {
|
|
// 使用 Comparator 比较版本号
|
|
VersionComparator versionComparator = new VersionComparator();
|
|
|
|
// 示例版本号
|
|
String version1 = "1.2.3";
|
|
String version2 = "1.10.5";
|
|
|
|
// 比较两个版本号
|
|
int result = versionComparator.compare(version1, version2);
|
|
|
|
if (result == 0) {
|
|
System.out.println(version1 + " is equal to " + version2);
|
|
} else if (result < 0) {
|
|
System.out.println(version1 + " is less than " + version2);
|
|
} else {
|
|
System.out.println(version1 + " is greater than " + version2);
|
|
}
|
|
}
|
|
} |