如何从java中的List <String>中删除和设置?

ome*_*ega 0 java loops list

在java中我有这个功能:

public List<String> seperatekeys(String text) {
    String[] keys = text.split("and");
    List<String> words = Arrays.asList(keys);

    ListIterator<String> iter = words.listIterator();
    while (iter.hasNext()) {
        String currentWord = iter.next().trim();
        if (currentWord.equals("")) {
            iter.remove();
        } else {
            iter.set(currentWord);
        }
    }

    return words;
}
Run Code Online (Sandbox Code Playgroud)

但是当我执行remove()时,它会崩溃说不支持的操作错误.

谁知道怎么修它?

谢谢

awk*_*ksp 5

问题是Arrays#asList()返回一个ArrayList继承remove()自的实现AbstractList.remove()in 的实现AbstractList是这样的:

public E remove(int index) {
    throw new UnsupportedOperationException();
}
Run Code Online (Sandbox Code Playgroud)

并且因为迭代器使用列表的迭代器来执行其remove()方法,所以最终会得到异常.

你有几个解决方案.您可以将结果传递Arrays#asList()ArrayList构造函数:

List<String> words = new ArrayList<>(Arrays.asList(keys));
Run Code Online (Sandbox Code Playgroud)

现在,您可以迭代结果List并删除所需的元素.

或者,正如MadProgrammer所说,你可以采用相反的方法并迭代数组并添加你想要保留的元素:

List<String> words = new ArrayList<>();
for (String s : keys) {
    String currentWord = s.trim();
    if (!currentWord.equals("")) {
        words.add(currentWord);
    }
}
Run Code Online (Sandbox Code Playgroud)