2013-02-27 13 views
19

Ho il seguente esempio per spiegare meglio quello che sto cercando di fare:Java divisa da un carattere successivo

String text = "a,b,,,,c,,"; 
String[] split = text.split(","); 
for(int i=0;i<split.length;i++){ 
    System.out.println("I = "+i+" "+split[i]); 
} 

l'output è:

I = 0 a 

I = 1 b 

I = 2 

I = 3 

I = 4 

I = 5 c 

Ma, quello che voglio è per ottenere un array di formato 8, contenente anche:

I = 6 

I = 7 

Naturalmente, gli ultimi 2 elementi saranno stringhe vuote, ma è essenziale per m e per averli. Inoltre, penso che sia logico averli. Cioè, se avevo:

String text = "a,b,,,,c,,d"; 

Il risultato sarebbe un array di dimensione 8 e non credo v'è una grande differenza tra i 2 esempi.

risposta

26
String[] split = text.split(",", -1); 

Questo comportamento in realtà sembra difficile, ma in realtà è spiegata (non molto bene secondo me, che ha detto) nella official documentation.

Se n è non positivo allora il modello verrà applicato il numero di volte possibile e la matrice può avere qualsiasi lunghezza

Il problema con text.split(",") è che è equivalente a text.split(",", 0). Utilizzando un limite 0, come spiegato nella documentazione:

Se n è zero, il modello verrà applicato il numero di volte possibile, la matrice può avere qualsiasi lunghezza e trascinamento stringhe vuote verrà scartato .

Sicuramente non vuoi che le stringhe vuote vengano scartate.

+6

Wow. Non pensavo di poter imparare qualcosa di nuovo su una cosa così basilare come 'String # split'. Mi sbagliavo. Sia la domanda che la risposta erano estremamente educative. Detto questo, offrire la * spiegazione * dell'utente avrebbe una buona risposta e renderlo perfetto. –

+0

Grazie, funziona benissimo! Ho programmato le applicazioni in Java per circa 3 anni, ma sembra che ci siano sempre cose nuove da imparare, anche se a prima vista sembrano semplici. – Anakin001

+0

@ T.J.Crowder Ho appena avuto questo problema la settimana scorsa e questo ha funzionato. In realtà non capisco molto bene perché/come funziona e la documentazione non è molto chiara a riguardo – m0skit0

0

preferisco (se è possibile utilizzare librerie esterne):

String[] split = StringUtils.splitPreserveAllTokens(text, ',');

Per la maggior parte della biblioteca StringUtils tende ad essere appena un po 'più efficiente rispetto alla implementazione di default di Java perché ... bene , hey, ecco perché Apache si è preso la briga di scriverlo. Inoltre, a prima vista, è chiaro cosa stia facendo questa divisione dal nome del metodo, mentre a prima vista potrebbe non esserci una divisione regolare delle stringhe con un limite -1.

Problemi correlati