web-dev-qa-db-ja.com

Grails:パイプを含む文字列を分割する

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

\\|で分割する必要があります。

58
Skip Head

パイプは、正規表現では特別な意味があるため、エスケープする必要があります。ただし、引用符を使用する場合は、スラッシュもエスケープする必要があります。基本的には、2つのオプションがあります。

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

または/余分なエスケープを回避するための文字列区切り文字として

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