2010-07-13 13 views
5

Caso 1Stringa, divisa. bisogno di aiuto comprensione

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

Stampe 1. Perché?

Caso 2

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

Stampe 0. Perché?

Onestamente, io sono ad una perdita qui

risposta

12

Questo comportamento è menzionato nella documentazione per String.split:

Questo metodo funziona come se invocando il two-argument split method con l'espressione dato e un argomento limite di zero. Le stringhe vuote finali non sono quindi incluse nell'array risultante.

Il primo esempio deve fornire un array contenente una stringa singola contenente spazi. Una stringa che contiene spazi non è vuota, quindi è inclusa nel risultato.

Il secondo esempio fornirebbe un array contenente molte stringhe vuote, ma queste non sono incluse nell'array risultante come menzionato nella documentazione.

Per quanto riguarda il motivo per cui i progettisti Java hanno deciso che la rimozione di stringhe vuote in coda quando limit è zero è una buona idea - non lo so. La maggior parte degli altri linguaggi/piattaforme di programmazione non lo fa. Lo considero un "gotcha", una funzionalità che non funziona come la maggior parte delle persone si aspetta.

+3

Si noti che se si usi 'a.split (",", -1) '(o qualsiasi negativo), i componenti finali vuoti non verranno rimossi. –

+0

Il motivo è che volevano che si comportasse come perl. –

+4

Tutta questa stranezza fa parte del motivo per cui Guava ha la sua classe Splitter. –

1

Caso 1 ha un singolo elemento della matrice b "" - i tuoi spazi

Caso 2 voci vuote vengono rimossi

0

In SQL Server 2005 mio nome db: un nome tavolo: un nome di colonna: un (varchar (max)), b (int) valori

ab

ciao | howdoudo | imfine | grazie 1
h | Ho | ine | tHS 2 helddlo | howdddoudo | imfiddne | tdhs 3

dirmi la procedura di scissione memorizzati per ottenere il tavolo si presenta così per esempio, quando b = 1 b = 2 b = 3

uscita Uscita aaa hello h helddlo howdoudo ho howdddoudo
imfine ine imfiddne grazie THS tdhs