2010-02-04 110 views
0

假設你有已創建後.split()然後使你有一大堆的空字符串在裏面,即的java:刪除元素從後陣.split()

myArray['','hello','thetimes','economist','','','hi'] 

一個String[]是否有一個方式從String[]刪除他們而不必循環,檢測字符串是否爲空然後添加到新的數組?

回答

3

有一種方法以從 字符串[]刪除它們,而無需循環圓形, 檢測是否字符串是空的,則 添加到新的數組?

編號數組具有固定長度。

8

這裏有一個更簡單的方法。

String.split("\\s+")將消除這些空字符串。

+0

你不能調用'.split()'在'的String []'。我已經將我的數組拆分爲某個字符串,例如'String [] hello = someString.split('abc');',我不能在''hello []''上執行'.split() 。或者..也許我誤解了你? – Federer 2010-02-04 14:41:54

+1

@theEconomist:不,你調用'String'本身的'.split()'。正則表達式參數指示要分割的模式。我命名的特定模式匹配「一個或多個空白字符」,這消除了結果數組中的空字符串。 – danben 2010-02-04 15:23:22

+0

@theEconomist:另外,如果你正在分裂多於空白,你可以擴展你的正則表達式來包含周圍的空白。例如'someString。split('abc')'會變成'someString.split(\\ s * abc \\ s *)'。 – danben 2010-02-04 15:26:50

0

將它轉換爲List可能是最簡單的,遍歷它併除去空的元素,例如

List<String> parts = new LinkedList<String>(string.split(pattern)); 
for (Iterator<String> it = parts.iterator(); 
    it.hasNext(); 
    ) { 
    if (it.next().isEmpty()) { 
     it.remove(); 
    } 
} 
return parts.toArray(new String[parts.size()]); 
+0

拆分後不會有空字符串! – fastcodejava 2010-02-04 15:10:51

0
String[] parts = string.split("\\s*" + splitString + "\\s*"); 

splitString是你原本分裂的字符串。

這擴展了拆分字符串,將任意的空格數加到它上面,以便它們作爲拆分器的一部分實現,而不是作爲結果數組的一部分。

0

真正的問題是在你正在做分割的正則表達式字符串中。看看here列表中的特殊符號添加像其他人一樣建議,如\\s

如果您想要學習比正則表達式更簡單的路線,您可以遍歷數組並將每個非空字符串添加到ArrayList<String>,然後將其更改回固定大小的數組。

0

沒有簡單的方法從陣列中刪除元素。你可以做replaceAll(),然後撥打split或撥打split("\\s+")多個空間。

1

該解決方案僅解決問題的一部分 - 只刪除尾隨的空字符串。 我用:

String st = "a,b,c,,d,,f,,,"; 
List<String> list = Arrays.asList(st.split("\\s*,\\s*")); 
while (list.remove("")); 
2

這裏是正確的魔道:

String str = "1, 2,3 4,, , ,5,,6, ,"; 
String arr[] = str.split("(\\s*,\\s*)+"); 
+0

輸出的例子會很有幫助。 – Trevor 2014-10-10 20:55:36