Grails: 如何分割包含竖线的字符串

35

我正在尝试分割一个 String。简单的例子可以工作:

groovy:000> print "abc,def".split(",");
[abc, def]===> null
groovy:000>

但是我需要用管道符号分割它,而不是逗号,但我没有得到期望的结果:

groovy:000> print "abc|def".split("|");
[, a, b, c, |, d, e, f]===> null
groovy:000>

当然,我的第一选择是将管道符(|)替换为逗号(,)作为分隔符。

但现在我很好奇:为什么这不起作用?转义管道符(\|)似乎也没有帮助:

groovy:000> print "abc|def".split("\|");
ERROR org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed, groovysh_parse: 1: unexpected char: '\' @ line 1, column 24.
   print "abcdef".split("\|");
                          ^

1 error
|
        at java_lang_Runnable$run.call (Unknown Source)
groovy:000>
2个回答

70
你需要使用"\\|"进行拆分。

你能提供一个例子吗?这不是我之前提供的代码片段吗? - Tom
1
@Tom,这是一个格式问题,他的意思是 \\|。你需要转义 \ 以便在字符串中解释它,这样它就可以转义 | - Colin Hebert
@Colin 非常感谢。没有注意到格式问题。请原谅我的疏忽。 - Tom
为什么 | 符号只有格式问题?其他的都正常工作。@Tom - Pratik Butani

24

你需要转义脱字符,因为它在正则表达式中有特殊意义。但是,如果你使用引号,你还需要转义斜杠。基本上,有两个选择:

asserts "abc|def".split("\\|") == ['abc','def']

或者使用/作为字符串分隔符,避免额外的转义。

asserts "abc|def".split(/\|/) == ['abc','def']

谢谢!'/ '看起来很像 Perl 和熟悉 :) - Tom
+1 针对解释和正确格式的演示。我不知道为什么其他答案得到了所有的赞,这个更好。 - Alan Moore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接