Grails: расщепление строки, содержащей трубу - PullRequest
30 голосов
/ 01 октября 2010

Я пытаюсь разделить String.Работают простые примеры:

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

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

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>

Ответы [ 2 ]

57 голосов
/ 01 октября 2010

Вам нужно разделить на \\|.

19 голосов
/ 01 октября 2010

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

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

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

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