2010-10-01 12 views
27

Estoy tratando de dividir un String. ejemplos simples funcionan:Grails: División de una cadena que contiene un conducto

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

Pero en lugar de una coma, tengo que dividirlo en las tuberías, y no estoy consiguiendo el resultado deseado:

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

Así que, por supuesto, mi primera opción sería para cambiar de las tuberías (|) a comas (,) como delimitadores.

Pero ahora estoy intrigado: ¿Por qué esto no funciona? Escapar de la tubería (\|) no parece ayudar:

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> 

Respuesta

53

necesita dividir en \\|.

+0

Podría dar un ejemplo? ¿No es lo mismo que el último fragmento de código que proporcioné? – Tom

+0

@Tom, era un problema de formato, quería decir '\\ |'. Necesitas escapar de '\' para que se interprete en la Cadena, por lo que puede escapar de '|' –

+0

@Colin Muchas gracias. No entendí ese problema de formateo. Mis disculpas. – Tom

17

Tiene que escapar de la tubería ya que, de hecho, tiene un significado especial en la expresión regular. Sin embargo, si usa comillas, también debe escapar de la barra inclinada. Básicamente, existen dos opciones a continuación:

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

o utilizando el / como delimitador de serie para evitar fugas adicionales

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

¡Gracias! El '/' parece perly y familiar :) – Tom

+0

+1 para la explicación y la demostración con el formato correcto. No sé por qué la otra respuesta está recibiendo todo el cariño, esta es mucho mejor. –

Cuestiones relacionadas