常用版本号 如
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;
}