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']
Share:
37,326
Tom
Author by

Tom

Updated on July 09, 2022

Comments

  • Tom
    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>