由于 android 版本名称是字符串数据类型,我想将我设备上现有的 apk 与新的 apk 更新版本名称进行比较。我知道如何以编程方式获取版本名称并且我有两个版本名称但是两个版本名称之间的字符串比较没有显示正确的结果
if ( oldVersionName.compareTo( newVersionName ) < 0 ) {
}
此 compareTo 在 1.0.9 和 1.0.12、1.0.9 和 1.0.10 等少数情况下不起作用。
请给我关于如何以编程方式比较两个字符串版本名称的解决方案?谢谢!
最佳答案
您可以使用以下方法获取 Android 版本的“int 形式”
Build.VERSION.SDK_INT
无论如何,如果您只有“点符号”形式的版本名称,您可以通过“.”拆分
字符串。 char,并逐个迭代进行比较。在我的脑海中,它看起来像。-
public int compareVersionNames(String oldVersionName, String newVersionName) {
int res = 0;
String[] oldNumbers = oldVersionName.split("\\.");
String[] newNumbers = newVersionName.split("\\.");
// To avoid IndexOutOfBounds
int maxIndex = Math.min(oldNumbers.length, newNumbers.length);
for (int i = 0; i < maxIndex; i ++) {
int oldVersionPart = Integer.valueOf(oldNumbers[i]);
int newVersionPart = Integer.valueOf(newNumbers[i]);
if (oldVersionPart < newVersionPart) {
res = -1;
break;
} else if (oldVersionPart > newVersionPart) {
res = 1;
break;
}
}
// If versions are the same so far, but they have different length...
if (res == 0 && oldNumbers.length != newNumbers.length) {
res = (oldNumbers.length > newNumbers.length)?1:-1;
}
return res;
}
只是没有尝试就写了,所以肯定可以优化,但这只是一个开始。
关于Android - 两个android版本名称之间的字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18699569/