Groovy / Java在括号上拆分字符串“(”

我正在尝试执行类似以下的拆分:

println "Hello World(1)".split("W"); 

输出:

 [Hello , orld(1)] 

我想执行这个分裂:

 println "Hello World(1)".split("("); 

但我明白了:

 Caught: java.util.regex.PatternSyntaxException: Unclosed group near index 1 ( 

有没有办法逃脱这个括号? 任何帮助表示赞赏。

 println "Hello World(1)".split("\\("); 

split方法采用正则表达式模式。

如果你想拆分“只是一个常规字符串”,你可以使用Pattern.quote来引用字符串:

 println "Hello World(1)".split(Pattern.quote("(")) 

使用groovy本机正则表达式语法时,您还可以使用单个转义:

 assert "Hello World(1)".split(/\(/) == ["Hello World", "1)"] 

你必须正确地逃避括号字符

 println "Hello World(1)".split("\\(") 

由于split只接受正则表达式,你必须作为转义字符传递给它。 为此,您必须在它前面添加反斜杠

 \( 

但上面有编译错误,因为它被解析为有效的转义字符,例如:

 \t Tab \n New Line or Line Feed \r Carriage Return 

因此,您必须使用2个反斜杠传递非含义字符(例如括号):

 \\( 

最后:

 println "Hello World(1)".split("\\("); 

或者你也可以通过java内置函数类命名为quote来做所有事情:

 println "Hello World(1)".split(Pattern.quote("("));