java實現版本號的比較


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM