java - 操作系统版本字符串比较
问题描述
根据https://developer.android.com/reference/android/os/Build.VERSION.html#RELEASE, Build.VERSION.RELEASE 包含像“3.4b5”这样的字符串,而我期待一个用点分隔的数字序列(.) 像“8.1.0”。
关于我何时会在操作系统版本中看到字符以及将当前操作系统版本与固定字符串(比如 7.0.0)进行比较的良好比较逻辑的任何想法。
解决方案
为了比较版本号,您可以执行以下操作:
// 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();
}
推荐阅读
- c# - 如何使用 AutoMapper 将关系表中的信息从多对多关系表映射到实体模型类
- css - Angular [style] 并不总是与 *ngFor div 一起使用
- java - 导致此异常的原因:java.lang.NullPointerException:无法调用“java.net.URL.toExternalForm()”
- ios - 如何使用 Xcode 创建 iOS Webview App (HTML5)?
- uipickerview - Swift:UIPickerView 和文本错位以及 iOS 14
- javascript - 在函数中调用 React Hook
- airflow - 在 apache 气流中制作新的 dag 时出错
- html - 聚焦或包含文本时在文本输入上浮动标签
- c - 应该将哪些字节写入 pty 以生成 KEY_HOME?
- multithreading - Indy 10 TcpServer 创建新线程