web-dev-qa-db-fra.com

Grails: Fractionnement d'une chaîne contenant un tuyau

J'essaie de diviser un String. Des exemples simples fonctionnent:

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

Mais au lieu d'une virgule, je dois le diviser sur des tuyaux, et je n'obtiens pas le résultat souhaité:

groovy:000> print "abc|def".split("|");
[, a, b, c, |, d, e, f]===> null
groovy:000>

Donc, bien sûr, mon premier choix serait de passer des tuyaux (|) en virgules (,) comme délimiteurs.

Mais maintenant, je suis intrigué: pourquoi cela ne fonctionne-t-il pas? Échapper au tuyau (\|) ne semble pas aider:

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

Vous devez vous séparer sur \\|.

58
Skip Head

Vous devez échapper à la pipe car, en effet, elle a une signification particulière dans l'expression régulière. Cependant, si vous utilisez des guillemets, vous devez également échapper à la barre oblique. Fondamentalement, deux options alors:

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

ou en utilisant le / comme délimiteur de chaîne pour éviter des échappements supplémentaires

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