Java 如何从列表中删除和设置<;字符串>;在爪哇?
在java中,我有以下功能:Java 如何从列表中删除和设置<;字符串>;在爪哇?,java,list,loops,Java,List,Loops,在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()) {
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;
}
public列出单独的键(字符串文本){
字符串[]键=text.split(“and”);
列表字=数组.asList(键);
ListIterator iter=words.ListIterator();
while(iter.hasNext()){
字符串currentWord=iter.next().trim();
if(currentWord.equals(“”){
iter.remove();
}否则{
iter.set(currentWord);
}
}
返回单词;
}
但当我执行remove()时,它会崩溃,并说unsupportedoperationerror
有人知道怎么修吗
谢谢问题在于
Arrays#asList()
返回一个ArrayList
实现,该实现继承了remove()。AbstractList
中remove()
的实现如下:
public E remove(int index) {
throw new UnsupportedOperationException();
}
由于迭代器使用列表的迭代器执行其remove()
方法,因此最终会出现异常
这里有一些解决方案。您可以将Arrays#asList()
的结果传递给ArrayList
构造函数:
List<String> words = new ArrayList<>(Arrays.asList(keys));
问题是Arrays#asList()
返回从AbstractList
继承remove()
的ArrayList
实现。AbstractList
中remove()
的实现如下:
public E remove(int index) {
throw new UnsupportedOperationException();
}
由于迭代器使用列表的迭代器执行其remove()
方法,因此最终会出现异常
这里有一些解决方案。您可以将Arrays#asList()
的结果传递给ArrayList
构造函数:
List<String> words = new ArrayList<>(Arrays.asList(keys));
Arrays.asList()
返回一个无法修改的List
(在运行时)为什么不试试currentword.equals(null)@shekhar:这有什么帮助?@shekhar如果你注意到,错误是remove()
。我看不出与null
比较会如何解决这个问题。创建一个空的ArrayList,直接迭代数组,添加那些你想保留的元素,而不是数组。asList()
返回一个无法修改的列表(在运行时),为什么不尝试currentword.equals(null)@shekhar:这有什么帮助?@shekhar如果你注意到,错误是remove()
。我看不出与null
比较会如何解决这个问题。创建一个空的ArrayList,直接迭代数组,添加那些你想保留的元素,如果它是new ArrayList
而不是new ArrayList
?@user3580294回答得好@单面体编号。前者为原始类型,应尽可能避免使用。后者是通用的,在大多数情况下是类型安全的。您直接将其分配到列表中。原始类型被推断为
@Unihedron在处理原始类型时不会发生任何推断,因为根本不会执行泛型检查。它应该是新ArrayList
而不是新ArrayList
?@user3580294回答得好@单面体编号。前者为原始类型,应尽可能避免使用。后者是通用的,在大多数情况下是类型安全的。您直接将其分配到列表中。原始类型被推断为
@Unihedron在处理原始类型时不进行推断,因为根本不执行泛型检查。