2009-02-13 30 views
98

Consulte el programa a continuación.El método Java split() elimina las cadenas vacías al final?

try { 
    for (String data : Files.readAllLines(Paths.get("D:/sample.txt"))){ 
     String[] de = data.split(";"); 
     System.out.println("Length = " + de.length); 
    } 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

ejemplo.txt:

 
1;2;3;4 
A;B;; 
a;b;c; 

Salida:

 
Length = 4 
Length = 2 
Length = 3 

¿Por segunda y tercera salida está dando 2 y 3 en lugar de 4. En sample.txt archivo, condición para la segunda y tercera line is debería dar nueva línea (\n o enter) inmediatamente después de dar el delimitador para el tercer campo. ¿Alguien puede ayudarme a obtener una longitud de 4 para la 2ª y 3ª línea sin cambiar la condición del archivo sample.txt y cómo imprimir los valores de de[2] (arroja ArrayIndexOutOfBoundsException)?

+0

Buena pregunta pero: Duplicado! Y falta la respuesta de la marca como aceptada –

Respuesta

22

echar un vistazo a la docs, aquí la cita importante:

[...] the array can have any length, and trailing empty strings will be discarded. 

Si no te gusta eso, echar un vistazo a el comentario de Fabian. Cuando llame al String.split(String), llama al String.split(String, 0) y descarta las cadenas vacías (como dicen los documentos), al llamar al String.split(String, n) con n < 0, no descartará nada.

249

Puede especificar que se aplique el patrón tan a menudo como sea posible con:

String[] de = data.split(";", -1); 

See the Javadoc para el método de división de tomar dos argumentos para más detalles.

+0

Sí ... Lo tengo ... Está funcionando bien ahora. Muchas gracias. – raja

+65

Marque la respuesta como aceptada. –

+1

No funciona – Frank

Cuestiones relacionadas