在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()时,它会崩溃说不支持的操作错误.
谁知道怎么修它?
谢谢
问题是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)