版本号对比方案及参考代码(Objective-C,Java,JavaScript)

常用版本号 如

2.0.1 与 2.0.2 相比  2.0.2是比2.0.1要新的

那么该如何对这个版本号进行对比

这里有一个比较简单的实现方案

2.0.1 这种格式可以拆分为多个部分

如这里的2是大版本号,0是子版本号,1是修复版本号

那么我们可以将2.0.1拆分为N部分

拆分N部分后 ,可以通过遍历来做对比

直接上代码

OC:

判断aVersion是否大于bVersion
例子 :
A.
NSString *aVersion = @"2.4.2";
NSString *bVersion = @"2.3.5";
[self compareVersion:aVersion biggerThan:bVersion] 为true

B.
NSString *aVersion = @"2.3.5";
NSString *bVersion = @"2.3.5";
[self compareVersion:aVersion biggerThan:bVersion] 为false

C.
NSString *aVersion = @"0.13.5";
NSString *bVersion = @"2.3.5";
[self compareVersion:aVersion biggerThan:bVersion] 为false

D.判断A版本号 不小于 B版本号
NSString *aVersion = @"2.0.0";
NSString *bVersion = @"2.3.5";  //为当前版本号
(![self compareVersion:aVersion biggerThan:bVersion]) 为true 

+ (BOOL)compareVersion:(NSString *)aVersion biggerThan:(NSString *)bVersion{
    NSArray<NSString *> *aArray = [aVersion componentsSeparatedByString:@"."];
    NSArray<NSString *> *bArray = [bVersion componentsSeparatedByString:@"."];
    NSUInteger loopCount = MIN(aArray.count,bArray.count);
    for (int i = 0; i < loopCount; i++) {
        if (aArray[i].integerValue > bArray[i].integerValue){
            return YES;
        }else if (aArray[i].integerValue < bArray[i].integerValue){
            return NO;
        }
    }
    return aArray.count > bArray.count;
}

JAVA:

判断aVersion是否大于bVersion
例子 :
A.
String aVersion = @"2.4.2";
String bVersion = @"2.3.5";
compareAppVersion(aVersion,bVersion) ;//为true

B.
String aVersion = @"2.3.5";
String bVersion = @"2.3.5";
compareAppVersion(aVersion,bVersion) ;//false

C.
String aVersion = @"0.13.5";
String bVersion = @"2.3.5";
compareAppVersion(aVersion,bVersion) ;//false

D.判断A版本号 不小于 B版本号
String aVersion = @"2.0.0";
String bVersion = @"2.3.5";  //为当前版本号
(!compareAppVersion(aVersion,bVersion)) 为true 

protected boolean compareAppVersion(String aVersion,String bVersion){
    String a = (aVersion != null ? aVersion : "");
    String b = (bVersion != null ? bVersion : "");
    List<String> aStringArray = Arrays.asList(a.split("\\."));
    List<String> bStringArray = Arrays.asList(b.split("\\."));
    int loopCount = Math.min(aStringArray.size(), bStringArray.size());
    for (int i = 0; i < loopCount; i++){
        try{
            if (Integer.parseInt(aStringArray.get(i)) > Integer.parseInt(bStringArray.get(i))){
                return true;
            }
            else if (Integer.parseInt(aStringArray.get(i)) < Integer.parseInt(bStringArray.get(i))){
                return false;
            }
        }
        catch (Exception e) {
            //logger.warn("compareAppVersion版本比较错误"+e.getMessage());
            // TODO: handle exception
        }
    }
    return aStringArray.size() > bStringArray.size();
}

JavaScript

----- JavaScript ------
判断方式请参考Java
function compareVersion(aVersion,bVersion){
    var a = (aVersion != null ? aVersion : "");
    var b = (bVersion != null ? bVersion : "");
    var aStringArray = a.split(".");
    var bStringArray = b.split(".");
    var loopCount = Math.min(aStringArray.length, bStringArray.length);
    for (var i = 0; i < loopCount; i++){
            if (parseInt(aStringArray[i]) > parseInt(bStringArray[i])){
                return true;
            }
            else if (parseInt(aStringArray[i]) < parseInt(bStringArray[i])){
                return false;
            }
    }
    return aStringArray.length > bStringArray.length;
}
时间: 2024-11-06 10:00:45

版本号对比方案及参考代码(Objective-C,Java,JavaScript)的相关文章

前端部署ant+yuicompressor文件压缩+获取版本号+SSH发布(部分代码)

文件压缩: <apply executable="java" parallel="false" failonerror="true" dest="../../release/publish/ecshop" append="false" force="true"> <fileset dir="../../release/publish/ecshop"&

js页面跳转参考代码大全

整理一下JS页面跳转参考代码 第一种:     <script language=/"javascript/" type=/"text/javascript/"> window.location.href=/"login.jsp?backurl=/"+window.location.href; </script> 第二种:     <script language=/"javascript/"&g

大公司移动前端开发面试题——做转盘[参考代码]

题目在此 http://www.cnblogs.com/arfeizhang/p/turntable.html 这几天一直在忙,终于找到时间把参考代码放出来了.大家参考一下. 参考代码考虑到让入行不久的前端也看得懂,没有进行封装.变量名也没有进行简写,尽量一看就明白. 图片随手在网上截的,也许没有对准圆心.这段代码只考虑了webkit内核的浏览器,没做兼容.重在让大家弄懂原理. :P 如果感到有些卡帧,可能是转盘图片带来的效果.在调试器上试过,能维持50-60帧,流畅度还是让人满意的.在LG G

agsXMPP参考代码

agsXMPP 1.删除好友 XmppCon.RosterManager.RemoveRosterItem(node.RosterItem.Jid); 2.注销用户 void userConn_OnLogin(object sender) { FireShowMsg(string.Format("{0} Login", userConn.MyJID.User)); RegisterIq rIq = new RegisterIq(); rIq.Type = IqType.set; rIq

HTML参考代码之你懂得的基础小白

HTML参考代码 排序 功能 标签 描述 01.01.01 基础 <!--...--> 定义注释. 01.01.02 基础 <!DOCTYPE> 定义文档类型. 01.09.01 链接 <a> 定义锚. 01.03.01 格式 <abbr> 定义缩写. 01.03.02 格式 <acronym> 定义只取首字母的缩写. 01.03.03 格式 <address> 定义文档作者或拥有者的联系信息. 01.11.01 编程 <app

【spring-boot】spring-boot项目中,通过thymleaf实现登录功能,这里是一个登录拦截器的参考代码

我们在实现网页登录操作时,需要对网页进行保护(权限控制),将没有没有登录到请求拦截在系统之外,那么这里可以通过一个拦截器实现该功能 以下是LoginHanderInterceptor.java的参考代码: package com.springboot.conponent; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; i

C#NET字符编码加解密的参考代码

//C#NET字符编码加解密的参考代码我是从老外程序里面拷贝出来的希望对大家有所用 1 public string Encrypt(string name) { 2 byte ivId = GetIVId(name); 3 cipher.IV = GetIV(ivId); 4 var buf = Encoding.UTF8.GetBytes(name); 5 6 using (var ms = new MemoryStream()) { 7 ms.WriteByte(ivId); 8 using

[ 转 ]编写高质量代码:改善Java程序的151个建议

记得3年前刚到公司,同桌同事见我无事可做就借我看<编写高质量代码:改善Java程序的151个建议>这本书,当时看了几页没上心就没研究了.到上个月在公司偶然看到,于是乎又找来看看,我的天,真是非常多的干货,对于我这种静不下心的人真是帮助莫大呀. 看完整本书,也记了不少笔记,我就分享一部分个人觉得有意义的内容,也为了方便以后自己温习. --警惕自增陷阱 i++表示先赋值后自增,而++i表示先自增后赋值.下面的代码返回结果为0,因为lastAdd++有返回值,而返回值是自增前的值(在自增前变量的原始

入门: 使用JNI 从C++代码中调用Java的静态方法

开发环境: 操作系统: (uname -a output)  Linux ubuntu 3.8.0-19-generic #29-Ubuntu SMP Wed Apr 17 18:16:28 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux JDK 版本 : (java -version) java version "1.7.0_51"OpenJDK Runtime Environment (IcedTea 2.4.4) (7u51-2.4.4-0ubun