1. 程式人生 > >版本號對比方案及參考代碼(Objective-C,Java,JavaScript)

版本號對比方案及參考代碼(Objective-C,Java,JavaScript)

true eap bstr math 當前 function loop sse 版本號

常用版本號 如

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;
}

版本號對比方案及參考代碼(Objective-C,Java,JavaScript)