版本号比较[versionCompare]

本文探讨了如何在软件开发中有效地进行版本号比较和解析,涵盖了常见的版本号格式和比较规则,旨在帮助开发者理解并正确处理版本号的管理问题。
    /***
     * 版本号比较
     * @param v1 版本号a
     * @param v2 版本号b
     * @return -1代表不是合格版本号;0代表一样大、1 代表版本号a大于版本号b、2代表版本号b大于版本号a
     */
    public static Integer versionCompare(String v1,String v2){
        Pattern pattern = Pattern.compile("\\d+(\\.\\d+)*");
        if(!(pattern.matcher(v1).matches()) || !(pattern.matcher(v2).matches())){
            //非合格版本号
            return -1;
        }
        String[] s1=v1.split("\\.");
        String[] s2=v2.split("\\.");

        //最小数组长度
        int length = s1.length < s2.length ? s1.length : s2.length;

        for (int i=0;i <length;i++){
            int diff = Integer.valueOf(s1[i]) - Integer.valueOf(s2[i]);
            if(diff == 0){
                continue;
            }else {
                // 1 参数a大于参数b 、2 参数a小于参数b
                return diff > 0 ? 1:2;
            }
        }

        //【特殊情况】
        String[] s3 = new String[]{};
        Integer ben = 0;
        Integer end = 0;
        Integer flag = 0;
        if(s1.length > s2.length){
            s3 = s1;
            ben = s2.length;
            end = s1.length;
            flag = 1;

        }
        if(s2.length > s1.length){
            s3 = s2;
            ben = s1.length;
            end = s2.length;
            flag = 2;
        }
        if(s3.length > 0){
            for (int j=ben;j <end;j++){
                int s3Val = Integer.valueOf(s3[j]);
                if(s3Val > 0){
                    return flag;
                }
            }
        }

        //一样大
        return 0;

    }


测试:

   System.out.println(ToolUtils.versionCompare("10.0.0","10.0.0"));//0
   System.out.println(ToolUtils.versionCompare("10.0.0","10.0.1"));//2
   System.out.println(ToolUtils.versionCompare("10.0.0","10.0"));//0
   System.out.println(ToolUtils.versionCompare("10.0.0","a.0"));//-1
   System.out.println(ToolUtils.versionCompare("9.6.0","9.0.61"));//1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值