仅当在实例化后将值分配给arrayList时,才会发生此错误。 This is the Error
这仅在代码如下时发生:
String line = scanner.nextLine();
line = line.replaceAll("[^A-Za-z]", " ");
line = line.toLowerCase();
List<String> words = new ArrayList<String>();
words = Arrays.asList(line.split(" "));
words.removeAll(Arrays.asList("", null));
System.out.println(Arrays.toString(words.toArray()));
当代码如下时,程序运行正常:
String line = scanner.nextLine();
line = line.replaceAll("[^A-Za-z]", " ");
line = line.toLowerCase();
List<String> words = new ArrayList<String>(Arrays.asList(line.split(" ")));
words.removeAll(Arrays.asList("", null));
System.out.println(Arrays.toString(words.toArray()));
感谢您提供任何进一步的解释和建议:)
答案 0 :(得分:2)
仅当在实例化后将值分配给arrayList时,才会发生此错误。
这不是您在这里所做的:
List<String> words = new ArrayList<String>();
words = Arrays.asList(line.split(" "));
您要为ArrayList
分配一个空的words
,然后再将List
创建的另一个Arrays.asList(line.split(" "))
分配给words
。第二个List
是固定大小的List
,因此您不能从其中删除元素。
如果稍后将一个不同的words
分配给它,则没有必要将ArrayList
初始化为空的List
。
如果要使用ArrayList
初始化了words
变量,请对第二条语句使用addAll
:
List<String> words = new ArrayList<String>();
words.addAll(Arrays.asList(line.split(" ")));
答案 1 :(得分:0)
words = Arrays.asList(line.split(" "));
问题是这行-Arrays.asList()创建一个不可变列表,之后您将无法添加/删除项目