Grails: Splitting a string that contains a pipe
I’m trying to split a String
. Simple examples work:
groovy:000> print "abc,def".split(",");
[abc, def]===> null
groovy:000>
But instead of a comma, I need to split it on pipes, and I’m not getting the desired result:
groovy:000> print "abc|def".split("|");
[, a, b, c, |, d, e, f]===> null
groovy:000>
So of course my first choice would be to switch from pipes (|
) to commas (,
) as delimiters.
But now I’m intrigued: Why is this not working? Escaping the pipe (\|
) doesn't seem to help:
groovy:000> print "abc|def".split("\|");
ERROR org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed, groovysh_parse: 1: unexpec开发者_如何学运维ted char: '\' @ line 1, column 24.
print "abcdef".split("\|");
^
1 error
|
at java_lang_Runnable$run.call (Unknown Source)
groovy:000>
You need to split on \\|
.
You have to escape pipe as, indeed, it has a special meaning in the regular expression. However, if you use quotes, you have to escape the slash as well. Basically, two options then:
asserts "abc|def".split("\\|") == ['abc','def']
or using the /
as string delimiter to avoid extra escapes
asserts "abc|def".split(/\|/) == ['abc','def']
精彩评论