Android API 28 Pattern.compile总是抛出异常

时间:2018-08-12 05:36:55

标签: android

String pattern = "\\{(*.)\\{";
Pattern.compile(pattern).matcher("Some string");

因非法状态异常而崩溃。

当我浏览Pattern类的源代码,方法compile时,它只有一个语句,即throw语句。并返回运行时异常

是指android阻止了Pattern类。如果是的话,还有其他使用Java regex的Pattern类的方法吗?

1 个答案:

答案 0 :(得分:0)

  

当我浏览Pattern类的源代码,方法compile时,它具有   仅一个声明,即throw声明。并返回运行时异常

因为您尚未下载Android API 28的源代码。您应该在SDK Manager中下载它,然后重新启动IDE,您将看到完整的源代码。

根本原因:您的模式在Java和Android中也不是有效的正则表达式

解决方案1:将正则表达式更改为

String pattern = "\\{(.*)\\{";

解决方案2:如果要在正则表达式中添加“(”或“)”,则必须在此之前使用“ \\”

String pattern = "\\{\\(*.\\)\\{";

奖金:请参阅this链接以了解有关正则表达式的更多信息。

更新1:根据您的示例,我想您想在花括号内获取该值

String title = "Not your billing ZIP code? {Update your address on file.}";

String pattern = ".*\\{(.*)\\}";
Matcher matcher = Pattern.compile(pattern).matcher(title);
if (matcher.matches()) {
       Log.d("regex_test", matcher.group(0));
       Log.d("regex_test", matcher.group(1));
} else {
       Log.d("regex_test", "not match");
}

输出:

08-13 15:26:12.132 6516-6516/com.example.pc.myapplication D/regex_test: Not your billing ZIP code? {Update your address on file.}
08-13 15:26:12.132 6516-6516/com.example.pc.myapplication D/regex_test: Update your address on file.