为什么这不起作用?
"hello[world".split("[")
这确实:
"hello[world".split("\[")
这实际上是不同上下文中的两个转义,因为参数是表示为字符串的正则表达式。
必须对[
进行转义,否则它将在正则表达式中具有特殊含义。 正则表达式的转义将使其[
。 但是,必须对进行转义,因为它在字符串中具有特殊含义(用于转义和用数值表示字符)。
情况可能更糟,因为字符在两种情况下都用于转义。 如果要按
字符拆分,则必须对正则表达式用法进行转义(
\
),但是您有两个字符,它们都必须在字符串上下文中进行转义。 如果要将其编写为常量,则要拆分的原始字符串中的用法也需要转义,因此类似的拆分如下所示:
"hello\world".split("\\")
不同版本的Groovy给出不同的结果。
对于 Groovy 1.1-BETA-1 及更高版本,
assert "hello[world".split("\[") == ["hello", "world"]
断言正常,但 Groovy 1.0 及更早版本给出断言错误。
assert "hello[world".split(/[/) == ["hello", "world"]
断言 OK 对于从 1.1-BETA-1 开始的所有版本,Groovy 1.0-jsr-01 到 1.0 给出断言错误,而 Groovy 1.0-beta-10 及更早版本给出词法错误。
"hello[world".split("\[").each{println it}
对于 1.0-beta-5 和 beta-3 的所有版本的 Groovy,打印
hello
world
但是 1.0-β-4 打印
[.]
[.]
hello
world