Grails: Splitting a string that contains a pipe
37,326
Solution 1
You need to split on \\|
.
Solution 2
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']
Author by
Tom
Updated on July 09, 2022Comments
-
Tom almost 2 years
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>