之前比较客户端版本号,一直用的是String.compareTo,知道出现bug之后才明白了它的不完善地方。它的比较方式是按照字符串的比较来执行的,所以它有不正确的地方。举个例子,之前客户端版本号为:9.9.9,而服务器端最新的客户端版本号为:10.0.1,虽然10.0.1明显高于9.9.9,但是按照compareTo方法,这个9.9.9是大于10.0.1的,导致客户端版本号比较错误。下面是分隔后的版本号转化为Integer值来比较,不过,还是首先比较的个数
1 public static int compareVersion(String version1, String version2) { 2 if (version1.equals(version2)) { 3 return 0; 4 } 5 String[] version1Array = version1.split("//."); 6 String[] version2Array = version2.split("//."); 7 int index = 0; 8 //获取最小长度值 9 int minLen = Math.min(version1Array.length, version2Array.length);10 int diff = 0;11 //循环判断每位的大小12 while (index < minLen && (diff = Integer.parseInt(version1Array[index]) - Integer.parseInt(version2Array[index])) == 0) {13 index++;14 }15 if (diff == 0) {16 //如果位数不一致,比较多余位数17 for (int i = index; i < version1Array.length; i++) {18 if (Integer.parseInt(version1Array[i]) > 0) {19 return 1;20 }21 }22 23 for (int i = index; i < version2Array.length; i++) {24 if (Integer.parseInt(version2Array[i]) > 0) {25 return -1;26 }27 }28 return 0;29 } else {30 return diff > 0 ? 1 : -1;31 }32 }