2011-10-31 16 views
7

Esempio rapido:Come dividere una stringa con caratteri di spaziatura all'inizio?

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); 
    } 
} 

voglio l'arr matrice contenga 2 elementi: "a" e "b", ma nel risultato ci sono 3 elementi: "" (stringa vuota), "a" e "b". Cosa dovrei fare per farlo bene?

+5

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

risposta

4

Una specie di imbroglio, ma sostituire:

String str = " a b"; 

con

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

In alternativa (non un cheat): String arr [] = str.trim(). Split ("\\ s +") – Vladimir

+0

@ DairT'arg, prende lo stesso identico codice – Joe

0

Piuttosto che tagliare, si può solo aggiungere un caso per verificare se una stringa è vuota o non.

+0

Non penso che la tua risposta sia adatta a la domanda... – Fred

2

L'altro modo per tagliare è quello di utilizzare guardare avanti e guardare dietro per essere sicuri che lo spazio bianco è inserito tra due caratteri non spazi bianchi, ... qualcosa come:

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

Il problema con questo è che non tagliare gli spazi iniziali, dando a questo risultato:

a 
b 

ma né deve come String#split(...) è per la scissione, non tagliare.

1

La soluzione semplice è utilizzare trim() per rimuovere gli spazi bianchi iniziali (e finali) prima della chiamata split(...).

Non è possibile farlo con solo split(...). La regex divisa corrisponde alla stringa separatori; cioè ci sarà necessariamente una sottostringa (possibilmente vuota) prima e dopo ogni separatore abbinato.

È possibile gestire il caso in cui lo spazio bianco è alla fine utilizzando split(..., 0). Ciò elimina tutte le stringhe vuote finali. Tuttavia, non esiste una forma equivalente di split per scartare le stringhe vuote iniziali.

Problemi correlati