原文地址:java版本号比较
思路:
- 将版本号按点分割,并转成数字类型,放入list
- 取两个版本位数的最大数,如:1.0.1为3位 1.0.0.1为4位
- 将位数不够的版本进行补全,不够部分补成0
- 从第一位开始比较,出现大于情况返回1,出现小于情况返回-1,后面的就不用再比较了,如果没有出现大于和小于的情况,那只剩下等于了,for循环走完,返回0
public class VersionCompareUtil {
/**
* version1 > version2,返回1;反之,返回-1;相等,返回0
*/
public static int compare(String version1, String version2) {
version1 = version1 == null ? "" : version1.replaceAll("[^\\d\\.]+", "");
version2 = version2 == null ? "" : version2.replaceAll("[^\\d\\.]+", "");
String[] version1Array = version1.split("\\.");
String[] version2Array = version2.split("\\.");
List<Integer> version1List = new ArrayList<Integer>();
List<Integer> version2List = new ArrayList<Integer>();
for (int i = 0; i < version1Array.length; i++) {
version1List.add(Integer.parseInt(version1Array[i]));
}
for (int i = 0; i < version2Array.length; i++) {
version2List.add(Integer.parseInt(version2Array[i]));
}
int size = version1List.size() > version2List.size() ? version1List.size() : version2List.size();
while (version1List.size() < size) {
version1List.add(0);
}
while (version2List.size() < size) {
version2List.add(0);
}
for (int i = 0; i < size; i++) {
if (version1List.get(i) > version2List.get(i)) {
return 1;
}
if (version1List.get(i) < version2List.get(i)) {
return -1;
}
}
return 0;
}
}