2012-03-25 74 views
2

啊!我有一個字符串列表...,我只是想,如果它是「」從字符串列表中刪除元素?

從列表中刪除一個元素,但我一直導致程序崩潰。我如何解決這個問題?我把數組列表放入一個字符串列表中,以便我可以將它移除。這裏是我有:

 List<String>list; 

     String[] f= new String[file.length()]; 
     f= file.split("<"); 

     list= Arrays.asList(f); 

     final Iterator<String> iter = list.iterator(); 
     while (iter.hasNext()) 
     { 
      final String temp = iter.next(); 
      // TODO check for zero-length arrays 
      if (temp.equals("")) 
      { 
       iter.remove(); 
      } 
     } 

錯誤:

Exception in thread "main" java.lang.UnsupportedOperationException 
    at java.util.AbstractList.remove(Unknown Source) 
     at java.util.AbstractList$Itr.remove(Unknown Source) 
     at utilities.Validation.Validate(Validation.java:44) 

後,我將其轉換爲一個列表,我可以打印清單就好了..它去除成爲問題,從它的元素.. 。

+2

它是如何崩潰的?你是否遇到異常? – Jeffrey 2012-03-25 00:36:01

+0

你爲什麼使用'final'關鍵字?你嘗試刪除它們嗎? – Bernard 2012-03-25 00:37:26

+0

@Jeffrey抱歉,忘了添加它,現在添加它 – BigBug 2012-03-25 00:38:49

回答

11

List通過Arrays#asList返回具有固定的大小。由於remove荷蘭國際集團的元件將修改的長度,它是不受支持的。如果你想有一個List允許取走物品,使用new ArrayList<>(Arrays.asList(array));

+0

沒錯。這是唯一正確的答案。 – 2012-03-25 00:44:32

+0

哦,好吧,哇,我現在明白了,謝謝! – BigBug 2012-03-25 00:53:34

0

Arrays.asList產生不允許添加或刪除單元的明細表。

如果有很多元素在這裏刪除,然後是一個快速的方法來做到這一點:

List<String> result = new ArrayList<String>(); 
for (String next : file) { 
    if (next != null && next.length() != 0) result.add(next); 
} 
+1

從'Arrays#asList' *返回的'List'是*可修改的。你被允許設置項目。 – Jeffrey 2012-03-25 00:53:47

+0

我的意思是你不能刪除或添加元素(在問題的上下文中)。即結構不可修改,而元素是,是的。 – 2012-03-25 01:29:27

1

您得到異常的原因已經得到解答,但我添加了一點關於您的代碼的註釋:您可以使用removeAll()方法以更簡單的方式從列表中刪除所有空字符串。您甚至不必檢查給定數組是否爲空,因爲此方法可以處理它們。

String[] array = { "aa", "", "cc", "", "d" }; 
List<String> list = new ArrayList<String>(Arrays.asList(array)); 

list.removeAll(Collections.singleton("")); 
System.out.println(list); 

它打印:

[aa, cc, d]