【问题标题】:Need regular expression to match android 4.2.1 and above需要正则表达式匹配android 4.2.1及以上
【发布时间】:2013-11-23 19:37:09
【问题描述】:

在一个项目中,我需要查看用户是否使用的是 android 4.2.1 及更高版本。请帮忙

我有 android 版本作为 java 中的字符串。我知道我可以在不使用正则表达式的情况下执行此操作,但我只需要使用正则表达式尝试一下

我可以使用类似的东西

Version = "4.2.2"
if(version.matches("[4-99]\\.[2-99]\\.[0-99]")) {
    return true;
} else {
    return false
}

这在 android 5.0.0 发布之前一直有效,之后它会在 5.2.0 之前失败

【问题讨论】:

  • 为什么不直接使用int currentapiVersion = android.os.Build.VERSION.SDK_INT;
  • 为什么是 4.2.1?与 4.2 相比,它没有引入任何新功能。

标签: java android regex expression


【解决方案1】:

您可以获得RELEASE 版本,它有 2 或 3 个级别:分别为主要、次要和构建:

String myVersion = android.os.Build.VERSION.RELEASE;

    String osMajor = "0";
    String osMinor = "0";
    String osBuild = "0";

    if(myVersion.matches("[0-9]+.[0-9]+.[0-9]+")){
        osMajor = myVersion.split("\\.")[0];
        osMinor = myVersion.split("\\.")[1];
        osBuild = myVersion.split("\\.")[2];
    }
    else if(myVersion.matches("[0-9]+.[0-9]+")){
        osMajor = myVersion.split("\\.")[0];
        osMinor = myVersion.split("\\.")[1];

    }

【讨论】:

  • 谢谢,我不确定是否可以用一个表达式来完成,例如 version.matches("[4-99].[0-99][0-99]")..如果版本为 4.0.0 及更高版本,上述将返回 true。当我需要了解 4.2.1 及更高版本时,我的问题就出现了
  • 在这个逻辑之后询问osMajor >=4; osMinor >=2;
  • 让您的代码简单明了。在某些测试用例中,正则表达式可能会失败,因此使用上述方式将很容易调试并留下日志。
  • 感谢 Maxim 的代码和建议。我想知道它是否可以使用正则表达式解决
【解决方案2】:

你应该看看http://developer.android.com/reference/android/os/Build.VERSION_CODES.html

android.os.Build.VERSION.RELEASE 返回用户可见的版本字符串。例如,“1.0”或“3.4b5”。

【讨论】:

    【解决方案3】:

    这个:

    String[] duh = version.split(".");
    
    // Convert the three version numbers to 3 ints, and then....
    
    int vers = (int1 * 100) + (int2 * 10) + int3; 
    

    【讨论】:

    • 谢谢。然而我正在寻找一种正则表达式的方式来解决这个问题
    • 你不能。 RE 仅用于编辑字符串,而不是执行复合 if 语句。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    相关资源
    最近更新 更多