2010-12-05 7 views
6

¿Qué debería devolver ",7-6-5-4-3-2-1,".split(',')?¿Qué debería hacer ", 7-6-5-4-3-2-1,". Split (',') return?

Parece volver

blank string 
    7-6-5-4-3-2-1 

decir. dos cuerdas. Esperaría una o tres cadenas, es decir, una cadena en blanco en ambos extremos o solo la cadena entre ',' s.

¿Estoy equivocado? ¿Hay una buena explicación para el comportamiento actual?

EDITAR:

Aceptar. Así que sí, tuve la expectativa equivocada y no, no hay una buena explicación aparte de que Java funciona de esa manera :). Gracias.

Edit2:

Usted puede obtener el comportamiento deseado con split(",", -1) (Scala 2.8.1)

Respuesta

12

Así es como funciona. Ver here, lo que explica la versión de Java expresiones regulares de la misma, pero es lo mismo en el final:

Arrastrando cadenas vacías, por tanto, no están incluidos en la matriz resultante.

+4

Tenga en cuenta que puede hacer que las cadenas vacías finales se incluyan con 's.split (", ", -1)' –

7

El comportamiento se expecteded. String#split(Char) en última instancia (a través de StringLike#split(Char) y String#split(String)) llama Java String#split(String, 0) que es documented:

[...] el patrón será aplicado tantas veces como sea posible, la matriz puede tener cualquier longitud, y arrastrando cadenas vacía ser desechados

Editar - Si desea más control sobre división de cadenas, mira Splitter en el Guava libraries.

Splitter.on(',').split(",7-6-5-4-3-2-1,") 
Cuestiones relacionadas