2011-02-01 12 views
7

Duplicar posible:
How do I split a string with any whitespace chars as delimiters?¿Cómo hago que Java ignore el número de espacios en una cadena cuando se divide?

Ambas líneas de Python me da exactamente la misma lista:

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

Salida:

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

Me sorprendió cuando el Java 'equivalentes' se negaron:

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

Salida:

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

¿Cómo hago Java ignora el número de espacios?

Respuesta

20

Prueba esto:

"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(" +"))); 

El argumento pasado a split() es una expresión regular, por lo que se puede especificar que se permite que el separador sea uno o más espacios.

que también permito pestañas y otros caracteres de espacio en blanco como separador, utilice "\ s":

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

Y si usted espera tener detrás o en la partida espacios en blanco al igual que en " 1 2 3 ", utilice esto:

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

no es el incorporado en 'String.trim()' más rápido y un poco más legible que 'String.replaceAll (" (^ \\ s + | \ \ s + $) "," ")' o ¿me estoy perdiendo algo? –

+2

^^ Es cierto, pero entonces no tendría la oportunidad de mostrar su 1337 REGEX SKLZ. ;-) –

+0

jaja :-) Estaba pensando que el recorte solo estaba recortando el carácter de espacio – arnaud576875

4

¿Qué le parece usar un buen regular expression? Tenga en cuenta que según la documentación de la API de Java, String.split tomará un parámetro de cadena de expresión regular.

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

prefiero "1 2 3".split("\s+") que "1 2 3".split(" +"). Cuando usa \s en lugar de "" es más legible y más seguro.

3

creo que esto debería hacer:

yourString.trim().split("\\s+"); 
Cuestiones relacionadas