网上搜索了下,没发现太好的实现,于是自己实现了。
原理就是按点号切割字符串后从前往后转换成数字进行比较,所以 2.11.3 > 2.6.2 (如果直接比较字符串,结果是错误的) 。
可以支持不同长度的版本号比较, 1.2.3 > 1.2。
不支持带数字的版本号进行比较,比如 1.2.3a vs 1.2.3b,会直接异常(
Integer.valueOf 方法扔异常)。如果有此需求应该自己实现版本比较函数。
public static int compare(String version1, String version2) {
String[] subVersions1 = version1.trim().split("\\.");
String[] subVersions2 = version2.trim().split("\\.");
int compareLength = Math.min(subVersions1.length, subVersions2.length);
for (int i = 0; i < compareLength; i++) {
int subVersion1 = Integer.valueOf(subVersions1[i]);
int subVersion2 = Integer.valueOf(subVersions2[i]);
if (subVersion1 < subVersion2) {
return -1;
} else if (subVersion1 > subVersion2) {
return 1;
}
}
if (subVersions1.length == subVersions2.length) {
return 0;
} else {
return (subVersions1.length < subVersions2.length ? -1 : 1);
}
}