2013-02-05 61 views
1

我在這個形式上的接收數據時,每個這三條線是它自己的字符串:正則表達式/ String.split並不如預期

0 -rw------- 1  167 Tue Nov 13 10:39:28 2012 .bash_history 
    0 -rw-r--r-- 1  40 Wed Nov 28 12:18:03 2012 aaa.txt 
22290 -rw-r--r-- 1 22824944 Tue Jan 15 15:05:58 2013 a.bin 

我嘗試使用這個正則表達式將其分割爲用白分隔的標記空間。

String[] tokens = newParts[i].split("\\s{1,}"); 

然而,這總是創建第一令牌作爲空字符串的前兩行,並正確地設置22290作爲用於第三行的第一個標記。爲什麼是這樣?所有其他的令牌都是我想要的。只是不是前兩行中的第一行,爲什麼?

+1

看看這個: - http://stackoverflow.com/a/14615793/1679863 –

+1

這個答案將幫助你:[Java字符串拆分刪除空值](http://stackoverflow.com/questions/14602062/java -string-split-removed-empty-values/14602089#14602089) – jlordo

+0

謝謝你們,我明白爲什麼現在我想,想知道,修剪是否修復它。我不確定誰先評論說,因爲他們刪除了它。 – Paul

回答

1

引述Pattern.split documentation

通過此方法返回的數組包含由另一個子序列匹配該圖案或由輸入序列的末端封端的終止輸入序列的每個子字符串。

所以如果你的字符串以分隔符開頭,你的第一個元素將是一個空字符串。同樣,如果你的字符串以分隔符結尾,你的最後一個元素將是一個空字符串。

編輯:其實split(string)調用split(string, 0),它明確丟棄尾隨的空元素。但它對空白的起始元素沒有任何作用。

如果您先輸入trim(),它應該如您所期望的那樣工作。

1

在分割字符串之前,可以使用.trim()來刪除前導和尾隨空格。這應該防止不必要的額外令牌。

相關問題