2011-10-31 9 views
7

prosty przykład:Jak podzielić łańcuch z białymi znakami na początku?

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

że chce ARR tablica zawiera 2 elementy: "a" i "b", a w rezultacie nie jest 3 części: "" (pusty łańcuch), "a" i "b". Co powinienem zrobić, żeby to naprawić?

+5

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

Odpowiedz

4

Rodzaju oszustwo, ale wymienić:

String str = " a b"; 

z

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

Alternatywnie (nie jest to oszustwo): String arr [] = str.trim(). Split ("\\ s +") – Vladimir

+0

@ DairT'arg, ma dokładnie ten sam dokładny kod – Joe

0

Zamiast przycinanie, można po prostu dodać if aby sprawdzić, czy ciąg jest pusty, czy nie.

+0

Nie sądzę, że twoja odpowiedź pasuje do pytanie... – Fred

2

Innym sposobem wykończenia jest używać patrzeć w przyszłość i spojrzeć za siebie, aby upewnić się, że spacja jest umieszczona między dwoma znakami nie-białych, ... coś takiego:

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

Problem z tym jest to, że nie przycinać spacje, dając ten wynik:

a 
b 

ale nie powinny go jako String#split(...) jest do podziału, nie przycinania.

1

Proste rozwiązanie polega na użyciu trim(), aby usunąć wiodące białe spacje przed wywołaniem split(...).

Nie można tego zrobić z tylko split(...). Podzielone wyrażenie jest dopasowanym ciągiem separatory; tj. koniecznie będzie podciąg (ewentualnie pusty) przed i po każdym dopasowanym separatorze.

Możesz zająć się przypadkiem, w którym białe spacje znajdują się na końcu, używając split(..., 0). Odrzuca to ciągi kończące puste ciągi. Jednak nie ma równoważnej formy split dla odrzucania wiodących pustych łańcuchów.

Powiązane problemy