Подтвердить что ты не робот

Grails: разделение строки, содержащей трубку

Я пытаюсь разбить a String. Простые примеры работы:

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

Но вместо запятой мне нужно разбить его на трубы, а Im не получит желаемый результат:

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>
4b9b3361

Ответ 1

Вам нужно разбить на \\|.

Ответ 2

Вы должны избегать трубы, поскольку, действительно, она имеет особое значение в регулярном выражении. Однако, если вы используете кавычки, вам также нужно избежать косой черты. В принципе, два варианта:

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

или используя / как разделитель строк, чтобы избежать лишних экранов

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