标签: 软件开发

  • Java工具-版本号比较

    Java工具-版本号比较

    工具类代码

    /**
     * 比较【数字+小数点】类型的版本号大小
     * <pre>
     *    前者大,返回 1
     *    后者大,返回 -1
     *    相等,返回 0
     *    不合法,返回 -2
     * </pre>
     *
     * @param version1 版本号1
     * @param version2 版本号2
     * @return int
     */
    public static int compareAppVersion(String version1, String version2) {
            if (version1 == null || version2 == null) {
                throw new RuntimeException("版本号不能为空");
            }
            version1 = version1.replaceAll("[^\\d.]", "");
            version2 = version2.replaceAll("[^\\d.]", "");
    
            int i = 0, j = 0;
            int n = version1.length(), m = version2.length();
            while (i < n || j < m) {
                int a = 0;
                for (; i < n && version1.charAt(i) != '.'; i++) {
                    a = a * 10 + version1.charAt(i) - '0';
                }
                i++;
                int b = 0;
                for (; j < m && version2.charAt(j) != '.'; j++) { b = b * 10 + version2.charAt(j) - '0'; } j++; if (a != b) { return a > b ? 1 : -1;
                }
            }
            return 0;
        }
    }

    示例

    public static void main(String[] args) {
        System.out.println(compareAppVersion("123.21", "ab123.ab21ab"));
        System.out.println(compareAppVersion("123.223", "123.123"));
        System.out.println(compareAppVersion("123.223.223", "123.123.1"));
        System.out.println(compareAppVersion("123.223._223.223", "5.123.5"));
        System.out.println(compareAppVersion("5.123.5", "_123.223.223.223"));
        System.out.println(compareAppVersion("555", "123._223.223.223"));
        System.out.println(compareAppVersion("123.223.223.223", "555"));
    }