从字符串列表中删除元素?

时间:2012-03-25 00:33:47

标签: java

AH!我有一个字符串列表...我只想从列表中删除一个元素,如果它是“”

但我继续导致程序崩溃。我该如何解决这个问题?我将一个数组列表放入一个字符串列表中,我认为可以将其删除。这就是我所拥有的:

        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)

在我将它转换为List之后,我可以打印列表就好......它正在从中删除成为问题的元素......

3 个答案:

答案 0 :(得分:12)

Arrays#asList返回的List具有固定大小。由于remove元素会修改长度,因此不支持。如果您想要List允许删除项目,请使用new ArrayList<>(Arrays.asList(array));

答案 1 :(得分: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]

答案 2 :(得分:0)

Arrays.asList生成一个不允许添加或删除元素的列表。

如果有很多要删除的元素,那么这里有一个快速的方法:

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