求字符串版本号比较算法!

发布于 2022-08-28 00:24:56 字数 78 浏览 6 评论 0

远程版本号: "1.1.1"
本地版本号: "2.0"

字符串保存,大家是怎么比较的呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

污味仙女 2022-09-04 00:24:56
  1. 利用自然排序算法,对版本号进行升序排序,后面的版本号自然比前面的版本号大
  2. 利用正则表达式匹配出 majorversion,minorversion,revision_nubmer,然后分别比较
  3. 将字符串用“.”分割后转化为大小为3的数组,不够的添加0,然后对数组进行比较
勿忘心安 2022-09-04 00:24:56

首先你自己要有一个比较标准,比如数字升高版本号也偏大的话直接比较字符就好,用

String s1 = "2.2.1";
String s2 = "1.2";
String[] tmp1 = s1.split("\\.");
String[] tmp2 = s2.split("\\.");

然后逐项比较应该也可以吧?不过要注意长度不同类似于2.2和2.2.1的这种比较应该就可以了。

慢慢从新开始 2022-09-04 00:24:56

也来贴一个Objective-C的:

@implementation NSString(Version)

-(BOOL) isOlderVersionThan:(NSString*)otherVersion
{
return ([self compare:otherVersion options:NSNumericSearch] == NSOrderedAscending);
}

-(BOOL) isNewerVersionThan:(NSString*)otherVersion
{
return ([self compare:otherVersion options:NSNumericSearch] == NSOrderedDescending);
}

@end

这看来是OC最简单的方法了,用NSString的compare方法,不知道有人这样用过没?

风渺 2022-09-04 00:24:56

我大Python怎么会没有库

In [1]: from distutils.version import LooseVersion                                                                                                                                                                                                                                                                                                                                                
In [2]: LooseVersion('1.0.0')                                                                                                                                                                                  
Out[2]: LooseVersion ('1.0.0')                                                                                                                                                                                  
In [3]: LooseVersion('2.0')                                                                                                                                                                                
Out[3]: LooseVersion ('2.0')                                                                                                                                                                                    
In [4]: cmp(_2,_3)                                                                                                                                                     
Out[4]: -1
In [5]: LooseVersion('1.0b')                                                                                                                                                                       
Out[5]: LooseVersion ('1.0b')
In [7]: cmp(_2,_5)                                                                                                                                                                                  
Out[7]: -1
2022-09-04 00:24:56

JavaScript 实现. 原理就是按 . 分开, 然后按位比较呗.

/*
  字符串比较
  返回值:
    0: 相等
    1: 大于
   -1: 小于
*/
function versionCompare( stra, strb ) {
  var straArr = stra.split('.');
  var strbArr = strb.split('.');
  var maxLen = Math.max( straArr.length, strbArr.length );
  var result, sa, sb;
  for ( var i = 0; i < maxLen; i++ ) {
    sa = ~~straArr[i];
    sb = ~~strbArr[i];
    if(sa > sb){
      result = 1;
    }
    else if(sa < sb){
      result = -1;
    }
    else {
      result = 0;
    }
    if ( result !== 0 ) {
      return result;
    }
  }
  return result;
}
花落人断肠 2022-09-04 00:24:56
>>> num = '@"1.1.1"'
>>> num1 = '@"1.1.1"'
>>> def run(s):
    return s.strip('@"').split('.')
>>> run(num1)
['1', '1', '1']
>>> run(num2)
['2', '0']
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文