2012-03-25 29 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]