Grails: Splitting a string that contains a pipe

Tom picture Tom · Oct 1, 2010 · Viewed 35.5k times · Source

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: unexpected char: '\' @ line 1, column 24.
   print "abcdef".split("\|");
                          ^

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

Answer

Skip Head picture Skip Head · Oct 1, 2010

You need to split on \\|.