android - Android API 28 Pattern.compile 总是抛出异常
问题描述
String pattern = "\\{(*.)\\{";
Pattern.compile(pattern).matcher("Some string");
因非法状态异常而崩溃。
当我浏览 Pattern 类的源代码时,方法 compile ,它只有一个语句,即 throw 语句。并返回运行时异常
是意味着 android 阻止了 Pattern 类。如果是,是否有任何其他方式使用 Java 正则表达式的 Pattern 类
解决方案
当我浏览 Pattern 类的源代码时,方法 compile ,它只有一个语句,即 throw 语句。并返回运行时异常
因为你还没有下载 Android API 28 的源代码。你应该去下载它SDK Manager
然后重新启动IDE你会看到完整的源代码。
根本原因:您的模式在 Java 和 Android中也不是有效的正则表达式
解决方案 1:将正则表达式更改为
String pattern = "\\{(.*)\\{";
解决方案 2:如果要在正则表达式中添加“(”或“)”,则必须在此之前使用“\\”
String pattern = "\\{\\(*.\\)\\{";
奖励:请参阅此链接以了解有关正则表达式的更多信息。
更新 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.
推荐阅读
- python - 如何从文件中获取名称并添加到路径
- microsoft-graph-api - 我可以了解 Microsoft Teams 频道成员更改事件吗?
- go - Golang 汇编中的快速转置字节矩阵 [][]byte
- python - 尝试针对表格测试输入时出现此错误
- css - 如何在每个(按钮、部分、正文)案例中显示带有浅灰色背景的加载程序
- mysql - 选择查询包含json数组中特定值的行?
- python - 用pydantic指定嵌套字典的最佳方法?
- android - Android - 在片段内设置活动为空
- python - 使用字符串和整数对列表进行排序
- blazemeter - Blazemeter Chrome 扩展调整框架