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

时间:2013-03-05 23:26:07

标签: java groovy escaping pattern-matching

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

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

输出:

[Hello , orld(1)]

我想执行此拆分:

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

但我明白了:

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

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

5 个答案:

答案 0 :(得分:52)

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

答案 1 :(得分:19)

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

如果要拆分“只是常规字符串”,可以先使用Pattern.quote引用字符串:

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

你必须正确地转义括号字符

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

答案 4 :(得分:0)

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

\(

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

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

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

\\(

最后:

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

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

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