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; } } } }