版本号对比方案及参考代码(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; }