java实现的版本号比较

Wesley13
• 阅读 505
/**
 *  实现版本号比较
 * 支持任意数字字母版本号比较,这里实现的是用点号(.)作为分隔符
 * 支持任意长度的小版本号比较
 */
public static int compareVersion(String ver1, String ver2){
        if(ver1 == null && ver2 == null){
            throw new RuntimeException("版本号不能都为空");
        }
        
        if(ver1 == null){
            return -1;
        }
        
        if(ver2 == null){
            return 1;
        }
        
        if(ver1.equals(ver2)) {
            return 0;
        }

        String [] version1 = ver1.split("\\.");
        String [] version2 = ver2.split("\\.");
        
            
        String defValue = "0000000000";
        String format = "%" + defValue.length() + "s";
        StringBuilder ver1Builder = new StringBuilder(version1.length * 10);
        StringBuilder ver2Builder = new StringBuilder(version2.length * 10);
        
        if(version1.length > version2.length) {
            for (int i=0; i<version1.length ;i++ ) {
                ver1Builder.append(String.format(format, version1[i]).replace(' ', '0'));
                ver2Builder.append(version2.length > i? String.format(format, version2[i]).replace(' ', '0') : defValue);
            }
        
        } else if(version1.length < version2.length){
            for (int i=0; i<version2.length ;i++ ) {
                ver2Builder.append(String.format(format, version2[i]).replace(' ', '0'));
                ver1Builder.append(version1.length > i? String.format(format, version1[i]).replace(' ', '0') : defValue);
            }

        } else {
            for (int i=0; i<version2.length ;i++ ) {
                ver1Builder.append(String.format(format, version1[i]).replace(' ', '0'));
                ver2Builder.append(String.format(format, version2[i]).replace(' ', '0'));
            }
        }

        return ver1Builder.toString().compareTo(ver2Builder.toString());
    }

测试代码

compareVersion("1.2", "1.2.312.3") //返回<0的数字    

compareVersion("12", "1.2.M1") //返回>0的数字

compareVersion("1.2.3M", "1.2.3M") //返回0
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Easter79 Easter79
3年前
sql注入
反引号是个比较特别的字符,下面记录下怎么利用0x00SQL注入反引号可利用在分隔符及注释作用,不过使用范围只于表名、数据库名、字段名、起别名这些场景,下面具体说下1)表名payload:select\from\users\whereuser\_id1limit0,1;!(https://o
Stella981 Stella981
3年前
GitHub Actions
使用GitHubActions发布版本时,获取触发的tag作为发布的版本号.方式一通过step获取tag,在需要使用的地方使用steps.get_version.outputs.VERSION,其中get_version是step的id.name:Release
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Jenkins Pipeline shell脚本用svn_revision当做系统版本号
1. 使用dir命令,进入发布目录,版本号所在文件夹。2. 使用sed命令 修改替换版本号,这里使用vvvv作为要替换的版本号。3. 最后一步可以不加。只是方便查看效果。stage("修改web系统版本号"){steps{dir('src/Hkk.Web/bi
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
天航星 天航星
4个月前
Java 比较版本号
在开发中,有时候会遇到比较两个文件的版本号,或者比较多个文件的版本号得出最新版本号。可以用如下代码解决:java/比较版本号@paramversion1版本号1@paramversion2版本号2@return0:版本号1版本号21:版本号1版本号21:版