Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据Android Studio的建议删除冗余转义导致应用程序崩溃_Android_Regex_Unit Testing - Fatal编程技术网

根据Android Studio的建议删除冗余转义导致应用程序崩溃

根据Android Studio的建议删除冗余转义导致应用程序崩溃,android,regex,unit-testing,Android,Regex,Unit Testing,我有下面的正则表达式 object MyRegtest { val TEST = Pattern.compile("\\{[^{}]+\\}") } 安卓工作室说我有一个多余的逃生通道 按照Android Studio的建议删除它们后,它变成如下所示 object MyRegtest { val TEST = Pattern.compile("\\{[^{}]+}") } 这一切似乎都很好,因为当我运行单元测试时,它编译并运行良好。请注

我有下面的正则表达式

object MyRegtest {
    val TEST = Pattern.compile("\\{[^{}]+\\}")
}
安卓工作室说我有一个多余的逃生通道

按照Android Studio的建议删除它们后,它变成如下所示

object MyRegtest {
    val TEST = Pattern.compile("\\{[^{}]+}")
}
这一切似乎都很好,因为当我运行单元测试时,它编译并运行良好。请注意,在更改之前和之后都可以很好地编译

    @Test
    fun addition_isCorrect() {
        val matcher = MyRegtest.TEST.matcher("2 matches {GoOd} and {GrEaT}, not {} to catch")
        while (matcher.find()) {
            println(matcher.group())
        }
    }
编译和运行应用程序时(简单示例)

它会崩溃的

Caused by: java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 9
    \{[^{}]+}
如果我把原始的正则表达式放回原处,编译应用程序,测试工作正常


是我做错了什么,还是这是安卓工作室的错误建议?为什么推荐的优化正则表达式只在单元测试中有效,而在应用程序中崩溃?

在Android正则表达式中,您需要在字符类之外转义右大括号,否则,该模式将无效(regexp模式中的
语法错误将按预期显示)

您从Android Studio收到的通知很可能基于Java正则表达式风格,其中
}
字符不必在字符类之外转义


因此,在这种情况下,Android Studio在通知“冗余转义”时是错误的,它在Android regex上下文中不是冗余的。

我已经向谷歌提交了一个问题
Caused by: java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 9
    \{[^{}]+}