2012-08-27 24 views
5

Non vedo perché la seguente uscita ha senso.Comportamento del metodo split split

String metodo split su una stringa vuota restituendo un array di stringa di lunghezza 1

String[] split = "".split(",");
System.out.println(split.length);
ritorni array di stringa di lunghezza 1

String[] split = "Java".split(",");
System.out.println(split.length);
ritorni array di stringa con lunghezza 1

Come differenziare ??

+3

Cosa * dovrebbe * fare? –

+1

Non ha trovato il posto da dividere, quindi ha restituito l'array con un'intera stringa. – Pshemo

+0

Direi che dovrebbe restituire 0 –

risposta

10

Da the documentation:

La matrice restituita da questo metodo contiene ogni sottostringa di questa stringa che termina con un'altra sottostringa che corrisponde all'espressione data o è terminato dalla fine della stringa.

Per rispondere alla tua domanda, si fa quello che si prevede di fare: la stringa restituita termina con la fine della stringa di input (in quanto non vi era alcuna , da trovare). La documentazione indica inoltre:

Se l'espressione non corrisponde a nessuna parte dell'input, l'array risultante ha solo un elemento, ovvero questa stringa.

Si noti che questa è una conseguenza della prima affermazione. Non è una circostanza aggiuntiva che gli sviluppatori Java hanno aggiunto nel caso in cui non fosse possibile trovare la stringa di ricerca.

+0

javadoc le regola tutte :) –

1

Restituisce la stringa originale (che in questo caso è la stringa vuota) poiché non c'era, da dividere.

2

Ho colpito anche questo. Quello che sta restituendo è la stringa fino a ma non includendo il carattere split. Se si desidera ottenere nessun stringhe, utilizzare StringTokenizer:

StringTokenizer st = new StringTokenizer(someString,','); 
int numberOfSubstrings = st.countTokens(); 
+0

Questo codice non funziona, le virgolette singole sono errate e restituirà 1 per un codice come: nuovo StringTokenizer ("ABC", ";"). CountTokens() –

0

Restituisce uno perché si misura la dimensione dell'array suddiviso, che contiene un elemento: una stringa vuota.