Java实现版本号比较算法

作者: ʘᴗʘ发布时间:2021-10-18 12:14 浏览量:854 点赞:573 售价:0

最近在开发《Maven Jar包新版本检测工具》的时候,需要一个算法来比较各种版本号的大小。简单的比如1.2.3这种纯数字的,复杂的则包含了特殊字符和字母,比如1.2.3-Beta1之类的。网上找了一下,大多都只支持纯数字的版本号判断。所以我把这些算法简单改造了一下,能够支持数字+字母+特殊字符的判断了。

PS:因为字母版本号命名基本没有规范,所以也就没有一个特定的规则去判断大小了。如果你要判断的版本号带有字母,请在本文代码的基础上再定制。

代码思路就是,先把各种特殊字符、字母替换一下,然后根据.来切分版本号字符串为数字数组。然后判断分段判断数字的大小,从而计算出版本号的大小。

Java版本号比较算法,代码如下:

public static int compareVersion(String version1, String version2) {

        version1 = version1.replace("_", ".").replace("-", ".").replaceAll("[^\\d.]+", "0");
        version2 = version2.replace("_", ".").replace("-", ".").replaceAll("[^\\d.]+", "0");

        version1 = version1.toLowerCase(Locale.ROOT);
        version2 = version2.toLowerCase(Locale.ROOT);

        String[] s1 = version1.split("\\.");
        String[] s2 = version2.split("\\.");
        int len1 = s1.length;
        int len2 = s2.length;
        int i, j;
        for (i = 0, j = 0; i < len1 && j < len2; i++, j++) {

            int big = 1;
            int small = -1;

            if (i == 0 && j == 0) {
                //大版本不一致
                big = 2;
                small = -2;
            }

            if (Long.parseLong(s1[i]) > Long.parseLong(s2[j])) {
                return big;
            } else if (Long.parseLong(s1[i]) < Long.parseLong(s2[j])) {
                return small;
            }
        }
        while (i < len1) {
            if (Long.parseLong(s1[i]) != 0) {
                return 1;
            }
            i++;
        }
        while (j < len2) {
            if (Long.parseLong(s2[j]) != 0) {
                return -1;
            }
            j++;
        }
        return 0;
}

版本比较函数的入参是需要比较的两个版本号字符串,返回结果是-2-1012

  • 如果version1大于version2,则返回正数;
  • 如果version1等于version2,则返回0;
  • 如果version1小于version2,则返回负数;

如果version1、version2相差的是大版本(大版本是指第一个.之前的数字),则返回的结果是2或者-2

版权声明:《Java实现版本号比较算法》为CoderBBB作者「ʘᴗʘ」的原创文章,转载请附上原文出处链接及本声明。

原文链接:https://www.coderbbb.com/articles/18

其它推荐:

user

ʘᴗʘ

77
文章数
67049
浏览量
53263
获赞数
67.80
总收入