Java String.compareTo(), 此方法如果这个字符串是
等参数字符串那么返回值0,如果这个字符串是按
字典顺序小于字符串参数那么返回小于0的值,
如果此字符串是按字典顺序大于字符串参数那么一个大于0的值
描述
java.lang.String.compareTo() 方法比较两个字符串的字典。比较是基于字符串中的每个字符的Unicode值。此String对象表示的字符序列的参数字符串表示的字符序列进行比较字典.
之前比较客户端版本号,一直用的是String.compareTo,
它的比较方式是按照字符串的比较来执行的,所以它有不正确的地方。
举个例子,之前客户端版本号为:9.9.9,而服务器端最新的客户端版本号为:10.0.1,虽然10.0.1明显高于9.9.9,但是按照compareTo方法,这个9.9.9是大于10.0.1的,导致客户端版本号比较错误。
下面是分隔后的版本号转化为Integer值来比较.
/**
*
* @Title: compareVersion
* @Description: 比较版本大小
* @param version1
* @param version2
* @return
* @return: int
*/
public static int compareVersion(String version1, String version2) {
if (version1.equals(version2)) {
return 0;
}
String[] version1Array = version1.split("\\.");
String[] version2Array = version2.split("\\.");
int index = 0;
//获取最小长度值
int minLen = Math.min(version1Array.length, version2Array.length);
int diff = 0;
//循环判断每位的大小
while (index < minLen && (diff = version1Array[index].length() - version2Array[index].length()) == 0 && (diff = version1Array[index].compareTo(version2Array[index]))==0) {
index++;
}
if (diff == 0) {
//如果位数不一致,比较多余位数
for (int i = index; i < version1Array.length; i++) {
if (Integer.parseInt(version1Array[i]) > 0) {
return 1;
}
}
for (int i = index; i < version2Array.length; i++) {
if (Integer.parseInt(version2Array[i]) > 0) {
return -1;
}
}
return 0;
} else {
return diff > 0 ? 1 : -1;
}
}