2011-10-31 29 views
7

ejemplo rápida:¿Cómo dividir una cadena con caracteres en blanco al principio?

public class Test { 
    public static void main(String[] args) { 
     String str = " a b"; 
     String[] arr = str.split("\\s+"); 
     for (String s : arr) 
      System.out.println(s); 
    } 
} 

Quiero el arr matriz para contener de 2 elementos: "a" y "b", pero en el resultado hay 3 elementos: "" (cadena vacía), "a" y "segundo". ¿Qué debo hacer para hacerlo bien?

+5

['trim()'] (http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#trim()) primero. –

Respuesta

4

especie de trampa, pero reemplace:

String str = " a b"; 

con

String str = " a b".trim(); 
+1

Alternativamente (no es un truco): String arr [] = str.trim(). Split ("\\ s +") – Vladimir

+0

@ DairT'arg, toma realmente el mismo código exacto – Joe

0

En vez de cortar, usted podría agregar un caso para comprobar si una cadena está vacía o no.

+0

No creo que su respuesta se ajuste a la pregunta... – Fred

2

La otra forma de corrección, es utilizar mirar hacia adelante y mirar hacia atrás para asegurarse de que el espacio en blanco se intercala entre dos caracteres no está en blanco, ... algo así como:

String[] arr = str.split("(?<=\\S)\\s+(?=\\S)"); 

El problema con esto es que no recorta los espacios iniciales, dando el siguiente resultado:

a 
b 

pero tampoco debe String#split(...) como es para dividir, no recorte.

1

La solución simple es usar trim() para eliminar el espacio en blanco inicial (y posterior) antes de la llamada split(...).

No puede hacer esto con solo split(...). La expresión regular dividida corresponde a los separadores de cadena ; es decir, necesariamente habrá una subcadena (posiblemente vacía) antes y después de cada separador coincidente.

Puede tratar el caso donde el espacio en blanco está al final usando split(..., 0). Esto descarta todas las cadenas vacías finales. Sin embargo, no existe una forma equivalente de split para descartar cadenas principales vacías.

Cuestiones relacionadas