首页 > 解决方案 > 操作系统版本字符串比较

问题描述

根据https://developer.android.com/reference/android/os/Build.VERSION.html#RELEASE, Build.VERSION.RELEASE 包含像“3.4b5”这样的字符串,而我期待一个用点分隔的数字序列(.) 像“8.1.0”。

关于我何时会在操作系统版本中看到字符以及将当前操作系统版本与固定字符串(比如 7.0.0)进行比较的良好比较逻辑的任何想法。

标签: javaandroidversioning

解决方案


为了比较版本号,您可以执行以下操作:

//  compare two strings, e.g. "5.8.0" with "1.88.3"
public int compare(String v1, String v2) {
    String s1 = normalisedVersion(v1);  //  normalized to "   5   8   0"
    String s2 = normalisedVersion(v2);  //  normalized to "   1  88   3"
    return s1.compareTo(s2);            //  returns -1 for lower, 0 equal and 1 for greater
}

public String normalisedVersion(String version) {
    return normalisedVersion(version, ".", 4);
}

public String normalisedVersion(String version, String sep, int maxWidth) {
    String[] split = Pattern.compile(sep, Pattern.LITERAL).split(version);
    StringBuilder sb = new StringBuilder();
    for (String s : split) {
        sb.append(String.format("%" + maxWidth + 's', s));
    }
    return sb.toString();
}

推荐阅读