之前比較客戶端版本號,一直用的是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 }