前言
最近项目上遇到需要比较APP版本号的情况,学习了网上相关的解决方案,在此做下记录。
版本号
移动开发过程中,许多场景需要用到版本号的比较,根据版本号的大小做不同的逻辑。iOS客户端的版本号传给后台的可能是2段、3段,例如2.3,1.2.1,一般不会出现4段和5段的情况。而Android可能是3段或者4段,例如三段1.3.0,四段 1.10.1.4等。
遵守原则:
- 版本号最多四位(可能2位,3位,4位);
- 版本号最大不超过99
版本号比较
方法一:
/**
* 版本号比较
*
* @param v1
* @param v2
* @return 0代表相等,1代表左边大,-1代表右边大
* Utils.compareVersion("1.0.358_20180820090554","1.0.358_20180820090553")=1
*/
public static int compareVersion(String v1, String v2) {
if (v1.equals(v2)) {
return 0;
}
String[] version1Array = v1.split("[._]");
String[] version2Array = v2.split("[._]");
int index = 0;
int minLen = Math.min(version1Array.length, version2Array.length);
long diff = 0;
while (index < minLen
&& (diff = Long.parseLong(version1Array[index])
- Long.parseLong(version2Array[index])) == 0) {
index++;
}
if (diff == 0) {
for (int i = index; i < version1Array.length; i++) {
if (Long.parseLong(version1Array[i]) > 0) {
return 1;
}
}
for (int i = index; i < version2Array.length; i++) {
if (Long.parseLong(version2Array[i]) > 0) {
return -1;
}
}
return 0;
} else {
return diff > 0 ? 1 : -1;
}
}
方法二:
使用org.apache.maven:maven-artifact:3.2.5
库中的
org.apache.maven.artifact.versioning.DefaultArtifactVersion
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
DefaultArtifactVersion minVersion = new DefaultArtifactVersion("1.0.1");
DefaultArtifactVersion maxVersion = new DefaultArtifactVersion("1.10");
DefaultArtifactVersion version = new DefaultArtifactVersion("1.11");
if (version.compareTo(minVersion) < 0 || version.compareTo(maxVersion) > 0) {
System.out.println("Sorry, your version is unsupported");
}
参考文章:
https://blog.csdn.net/weixin_45559862/article/details/125662226
https://cloud.tencent.com/developer/article/1979311