java比較版本號大小


一開始用String.compareTo,出現bug之后才明白了它的不完善地方。它的比較方式是按照字符串的比較來執行的,所以它有不正確的地方。舉個例子,之前客戶端版本號為:9.9.9,而服務器端最新的客戶端版本號為:10.0.1,雖然10.0.1明顯高於9.9.9,但是按照compareTo方法,這個9.9.9是大於10.0.1的,導致客戶端版本號比較錯誤。下面是分隔后的版本號單獨進行比較,不過,還是首先比較的個數

 

  1. /** 
  2.  * 比較版本號的大小,前者大則返回一個正數,后者大返回一個負數,相等則返回0 
  3.   規則是按日期訂的例如:2.10.15   項目啟動第2年的8月15號
  4.  * @param version1 
  5.  * @param version2 
  6.  * @return 
  7.  */  
  8. public static int compareVersion(String version1, String version2) throws Exception {  
  9.    

    if (version1 == null || version2 == null) {
    throw new Exception("compareVersion error:illegal params.");
    }
    String[] versionArray1 = version1.split("\\.");//注意此處為正則匹配,不能用".";
    for(int i = 0 ; i<versionArray1.length ; i++){ //如果位數只有一位則自動補零(防止出現一個是04,一個是5 直接以長度比較)
    if(versionArray1[i].length() == 1){
    versionArray1[i] = "0" + versionArray1[i];
    }
    }
    String[] versionArray2 = version2.split("\\.");
    for(int i = 0 ; i<versionArray2.length ; i++){//如果位數只有一位則自動補零
    if(versionArray2[i].length() == 1){
    versionArray2[i] = "0" + versionArray2[i];
    }
    }
    int idx = 0;
    int minLength = Math.min(versionArray1.length, versionArray2.length);//取最小長度值
    int diff = 0;
    while (idx < minLength
    && (diff = versionArray1[idx].length() - versionArray2[idx].length()) == 0//先比較長度
    && (diff = versionArray1[idx].compareTo(versionArray2[idx])) == 0) {//再比較字符
    ++idx;
    }
    //如果已經分出大小,則直接返回,如果未分出大小,則再比較位數,有子版本的為大;
    diff = (diff != 0) ? diff : versionArray1.length - versionArray2.length;
    return diff;
    }


免責聲明!

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



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