java比較版本號


java比較版本號,比如1.0.3和1.2.1相比較考慮到可以用String的compareTo()方法,代碼如下:

public class MainClass {
    public static void main(String[] args) {    

        String version1 = "1.0.3";
        String version2 = "1.2.1";
        
        int compareTo = version1.compareTo(version2);
        
        System.out.println(compareTo);
             
    }     
}

輸出結果是-2,也就是說version1小,這是正確的。

但是,這種情況僅限於小數點左右的數字位數相同,如果不相同,會出現一下情況:

public class MainClass {
    public static void main(String[] args) {    

        String version1 = "5.2.3790.24123";
        String version2 = "5.11.7883";
        
        int compareTo = version1.compareTo(version2);
        
        System.out.println(compareTo);
    }    
}

這是輸出結果是1,表示version1大,顯然是錯誤的。

所以,正常邏輯應該是以小數點分隔,對應位置上的數字比較大小,代碼如下:

public class MainClass {
    /**
     * 比較版本號的大小,前者大則返回一個正數,后者大返回一個負數,相等則返回0 
     */
    public static void main(String[] args) {    
        String version1 = "5.2.3790.24123";
        String version2 = "5.11.7883";
        
        String[] split1 = version1.split("\\.");  //以.分隔需要轉義
        String[] split2 = version2.split("\\.");
        
        int length=Math.min(split1.length, split2.length);
        int diff=0;
        for(int i=0;i<length;i++){
            diff = split1[i].length()-split2[i].length();
            if(diff==0){   //位數相同時,比較大小
                if(split1[i].compareTo(split2[i])>0){
                    System.out.println("1");
                    break;
                }else if(split1[i].compareTo(split2[i])<0){
                    System.out.println("-1");
                    break;
                }else if(i==length-1){
                    System.out.println(length==split1.length? -1 : 1);
                }
                
            }else if(diff !=0){  //位數不同時,直接輸出
                System.out.println(diff);
                break;
            }
            
        }
    }    
}

 


免責聲明!

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



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