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