2013-07-19 11 views
5

Ho due regexpressions:Split String in Java con [a-z] espressione regolare

[a-c] : any character from a-c 

[a-z] : any character from a-z 

E un test:

public static void main(String[] args) { 
    String s = "abcde"; 
    String[] arr1 = s.split("[a-c]"); 
    String[] arr2 = s.split("[a-z]"); 

    System.out.println(arr1.length); //prints 4 : "", "", "", "de" 
    System.out.println(arr2.length); //prints 0 
} 

Perché la seconda divisione si comporta in questo modo? Mi aspetterei un reslut con 6 risultati a stringa vuota "".

risposta

9

Secondo the documentation of the single-argument String.split:

Questo metodo funziona come se richiamando il metodo due argomenti split con l'espressione data e un argomento limite pari a zero. Le stringhe vuote finali non sono quindi incluse nell'array risultante.

Per mantenere le corde di trascinamento, è possibile utilizzare la versione a due argomenti, e specificare un limite negativo:

String s = "abcde"; 
    String[] arr1 = s.split("[a-c]", -1); // ["", "", "", "de"] 
    String[] arr2 = s.split("[a-z]", -1); // ["", "", "", "", "", ""] 
+0

non ho notato il comportamento finale descritto nella documentazione, grazie – geo

5

Per impostazione predefinita, gli scarti split eliminano le stringhe vuote. Nel caso arr2, tutti stavano trascinando le stringhe vuote, quindi sono stati tutti scartati.

Per ottenere 6 stringhe vuote, passare un limite negativo come secondo parametro allo split method, che manterrà tutte le stringhe vuote finali.

String[] arr2 = s.split("[a-z]", -1); 

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

+0

grazie la tua prima frase dice tutto – geo

0

String.split():

Spaccature questa stringa intorno partite della data espressione regolare.

Intorno significa che le corrispondenze stesse vengono rimosse. Ad esempio, la divisione "a, b, c" in virgola sarebbe solo a e b e c.

La prima divisione rimuove a, b, e c.

Il secondo rimuove tutte le lettere, quindi tutti i caratteri da quella stringa.

+0

Credo che tu abbia frainteso la domanda: la tua risposta è corretta, ma non si riferisce. – ruakh

+0

@ruakh "Perché la seconda divisione si comporta in questo modo?" Modifica ora. – hexafraction

Problemi correlati