2013-02-27 44 views
19

我下面舉個例子,更好地說明我想要做的事:的Java分裂由連續的字符

String text = "a,b,,,,c,,"; 
String[] split = text.split(","); 
for(int i=0;i<split.length;i++){ 
    System.out.println("I = "+i+" "+split[i]); 
} 

輸出是:

I = 0 a 

I = 1 b 

I = 2 

I = 3 

I = 4 

I = 5 c 

但是,我要的是以獲得大小爲8的陣列,還包含:

I = 6 

I = 7 

當然,最後的2個元素將是空字符串,但它是對於m必不可少e得到它們。另外,我認爲擁有它們是合乎邏輯的。我的意思是,如果我有:

String text = "a,b,,,,c,,d"; 

其結果將是大小爲8的數組,我不認爲有2個例子之間有很大的區別。

回答

26
String[] split = text.split(",", -1); 

這種行爲實際上看起來棘手,但它在official documentation實際上說明(不是很順利恕我直言,這說的)。

如果n是非正則的圖案將被多次 可以施加和陣列可具有任何長度

text.split(",")的問題是,它是等效於text.split(",", 0)。使用0的限制,如文檔中說明:

如果n爲零,則該模式將作爲 可以被應用爲多次,該陣列可具有任何長度,並且尾隨空字符串 將被丟棄

您絕對不希望空字符串被丟棄。

+6

哇。我不認爲我可以學習像String#split這樣基本的東西。我錯了。問題和答案都非常有教育意義。這就是說,提供用戶*解釋*將會給出一個很好的答案並使其變得更好。 – 2013-02-27 13:32:09

+0

謝謝,它效果很好!我用java編寫了大約3年的應用程序,但似乎總是有新的東西要學,即使它們看起來很簡單。 – Anakin001 2013-02-27 14:38:17

+0

@ T.J.Crowder上週我剛剛遇到了這個問題,而且工作。我實際上不太明白爲什麼/這是如何工作的,而且文檔也不是很清楚 – m0skit0 2013-02-27 14:58:18

0

我喜歡(如果你可以使用外部庫):

String[] split = StringUtils.splitPreserveAllTokens(text, ',');

對於StringUtils庫往往只是有點超過默認的Java實現,因爲有效的大部分...好,嘿,這就是爲什麼阿帕奇打擾寫它。另外,從表面上看,這種分割方法的名稱很清楚,而乍一看,帶-1的限制的常規字符串分割可能不會。