2011-02-01 9 views
7

Eventuali duplicati:
How do I split a string with any whitespace chars as delimiters?Come faccio a fare in modo che Java ignori il numero di spazi in una stringa durante la divisione?

Entrambe queste linee Python mi dà esattamente la stessa lista:

print("1 2 3".split()) 
print("1 2 3".split()) 

uscita:

['1', '2', '3'] 
['1', '2', '3'] 

Sono rimasto sorpreso quando 'equivalenti' il Java rifiutato:

System.out.println(Arrays.asList("1 2 3".split(" "))); 
System.out.println(Arrays.asList("1 2 3".split(" "))); 

uscita:

[1, 2, 3] 
[1, , 2, , , 3] 

Come faccio a rendere Java ignorare il numero di spazi?

risposta

20

Prova questa:

"1 2 3".split(" +") 

// original code, modified: 
System.out.println(Arrays.asList("1 2 3".split(" +"))); 
System.out.println(Arrays.asList("1 2 3".split(" +"))); 

L'argomento passato alla split() è un Regex, in modo da poter specificare che si consente il separatore di essere uno o più spazi.

io ti permetto anche schede e altri spazi vuoti come separatore, utilizzare "\ s":

"1 2 3".split("\\s+") 

E se si aspetta di avere finali o voce spazi bianchi come in " 1 2 3 ", utilizzare questo:

" 1 2 3 ".replaceAll("(^\\s+|\\s+$)", "").split("\\s+") 
+3

non è il built-in 'String.trim()' più veloce e un po 'più leggibile rispetto 'String.replaceAll (" (^ \\ s + | \ \ s + $) "," ")' o mi manca qualcosa? –

+2

^^ Vero, ma poi non avrebbe avuto l'opportunità di mostrare il suo 1337 REGEX SKLZ. ;-) –

+0

haha ​​:-) Stavo pensando che l'assetto stava solo riducendo il carattere dello spazio – arnaud576875

4

Che ne dici di usare un pulito regular expression? Si noti che in base alla documentazione dell'API Java, String.split prenderà un parametro di stringa dell'espressione regolare.

"1 2 3".split("\\s+") 
0

preferisco "1 2 3".split("\s+") di "1 2 3".split(" +"). Quando si utilizza \s anziché "" è più leggibile e più sicuro.

3

Penso che questo dovrebbe fare:

yourString.trim().split("\\s+"); 
Problemi correlati