java比较版本号大小

/**
     * 比较版本号的大小
     * <p>
     * 1、前者大则返回一个正数
     * 2、后者大返回一个负数
     * 3、相等则返回0
     *
     * @param version1 版本号1
     * @param version2 版本号2
     * @return int
     */
    public static int compareVersion(String version1, String version2) {
        if (version1 == null || version2 == null) {
            throw new RuntimeException("版本号不能为空");
        }
        // 注意此处为正则匹配,不能用.
        String[] versionArray1 = version1.split("\\.");
        String[] versionArray2 = version2.split("\\.");
        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 = Integer.parseInt(versionArray1[idx]) - Integer.parseInt(versionArray2[idx])) == 0) {
            ++idx;
        }*/
        while (idx < minLength
                && (diff = Integer.parseInt(versionArray1[idx]) - Integer.parseInt(versionArray2[idx])) == 0) {
            ++idx;
        }
        diff = (diff != 0) ? diff : versionArray1.length - versionArray2.length;
        return diff;
    }

    public static void main(String[] args) {
        String v1 = "1.001.2";
        String v2 = "1.8.8";
        String v3 = "1.8.1";
        String v4 = "1.8.8.1";
        int res1 = compareVersion(v1, v2);
        System.out.println(res1);//-7
        int res2 = compareVersion(v2, v3);
        System.out.println(res2);//-7
        int res3 = compareVersion(v3, v4);
        System.out.println(res3);//-7
        int res4 = compareVersion(v2, v4);
        System.out.println(res4);//-1
    }

猜你喜欢

转载自www.cnblogs.com/zengnansheng/p/12652120.html