Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从列表中删除和设置<;字符串>;在爪哇?_Java_List_Loops - Fatal编程技术网

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()) {

在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;
}
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在处理原始类型时不进行推断,因为根本不执行泛型检查。