2013-01-17 74 views
4

我期待在每個空間將一個字符串拆分爲一個字符串數組。在單個空間拆分一個字符串

例如:

This_sentence_gets__split.(下劃線表示這裏空格)

變爲

"This"

"sentence"

"gets"

" "(注意雙空間被保留爲一個空格)

"split."

我以爲我可以String.split(String regex)做到這一點,但我不是很好的正則表達式,我不知道我會做到這一點。

編輯:

第一之後的任何空間應分割爲多個子爲好。例如: Split___this.成爲"Split" "" ""this."

+1

你需要的輸出不是你在單個空間上分割時得到的。這個'單個空間'不會是數組中的另一個元素。所以,基本上,你的雙空間將會產生一個空字符串,而不是數組中的單個空間。 –

+0

@Fishstick你想如何分割數據:'A_B__C ___ D ____ E'? – Pshemo

+0

@Pshemo第一個之後的任何額外空格將被拆分。我將編輯這個問題來反映這一點。 –

回答

7

我認爲這可能是你正在尋找(你可以用\\s類改善它就像標籤所有空白的東西,新線等)

String data = "This_sentence__gets___split".replace('_', ' '); 
// System.out.println(data); 
String arr[] = data.split("(?<!) |(?<= {2})"); 
for (String s : arr) 
    System.out.println("\"" + s + "\""); 

輸出:

"This" 
"sentence" 
" " 
"gets" 
" " 
" " 
"split." 

說明:

  • "(?<!) "會分裂只能在沒有足夠的空間才
  • "(?<= {2})"將在收到兩個空格的地方分割空間。
+0

+1不錯的工作。我正要編輯我的答案相同,但沒有得到第二個正則表達式:) –

+0

謝謝,接受的答案。雖然刪除多餘的空間將是很好的學習這些東西。我將包括它。 –

+0

@Fishstick很高興喜歡它。 – Pshemo

1

它並不難:

str.split(" "); 
0

嘗試StringTokenizer

StringTokenizer st = new StringTokenizer("this is a test", " ", true); 
while (st.hasMoreTokens()) { 
    System.out.println(st.nextToken()); 
} 

UPDATE:

第三個參數()將把定界符作爲單獨的令牌,從而它們將被單獨返回。

0

我對正則表達式也不是很瞭解,這就是爲什麼我選擇使用Google Guava's Splitter class

例子:

private static final Splitter splitter = 
     Splitter.on(',').trimResults().omitEmptyStrings(); 

//results in {"some", "string"} 
splitter.split("some string"); 

可以玩弄trimResults(),omitEmptyStrings(),和其他選項,你怎麼樣去調整它。

:)