2010-07-13 17 views
5

Caso 1Cadena, dividir. necesita ayuda para entender

String a = "   "; 
String[] b = a.split(","); 
System.out.println(b.length); 

imprime 1. ¿Por qué?

Caso 2

String a = ",,,,,,,,,,,,"; 
String[] b = a.split(","); 
System.out.println(b.length); 

imprime 0. ¿Por qué?

honestamente, yo estoy en una pérdida aquí

Respuesta

12

Este comportamiento se menciona en la documentación para String.split:

Este método funciona como si invocando la two-argument split method con la expresión dada y un argumento límite de cero. Por lo tanto, las cadenas vacías no se incluyen en la matriz resultante.

Su primer ejemplo debe dar una matriz que contiene una sola cadena que contiene espacios. Una cadena que contiene espacios no está vacía, por lo que se incluye en el resultado.

Su segundo ejemplo daría una matriz que contiene muchas cadenas vacías, pero estas no están incluidas en la matriz resultante como se menciona en la documentación.

En cuanto a por qué los diseñadores de Java decidieron que eliminar las cadenas vacías finales cuando limit es cero es una buena idea, no lo sé. La mayoría de los otros lenguajes de programación/plataformas no hacen esto. Considero que es un "gotcha", una característica que no funciona del todo como la mayoría de la gente espera.

+3

Tenga en cuenta que si se utiliza 'a.split (",", -1) '(o cualquier negativo), los componentes finales vacíos no se eliminarán. –

+0

La razón es que querían que se comportara de la misma manera que Perl. –

+4

Toda esta rareza es parte de la razón por la cual Guava tiene su propia clase Splitter. –

1

Caso 1 tiene un solo elemento en el array b "" - sus espacios

Caso 2 entradas vacías están siendo eliminados

0

En SQL Server 2005 mi nombre db: un nombre tabla: un nombre columna: un (varchar (max)), b (int) valores

ab

hola | howdoudo | ImFINE | 1 gracias
h | ho | ine | THS 2 helddlo | howdddoudo | imfiddne | TDHS 3

dime el procedimiento de división almacenado para obtener la tabla se parece a esto para decir, cuando b = 1 b = 2 b = 3

de salida Salida de aaa hola h helddlo howdoudo ho howdddoudo
ImFINE ine imfiddne gracias THS TDHS

Cuestiones relacionadas