为什么抛出空异常指针错误,我该如何解决这个问题谢谢。如果你能解释该怎么做。我试图将每行从txt文件存储到arraylist中,该arraylist进入一个更大的单独行数组列表。
public static ArrayList<ArrayList<String>> addAfter(String file1)throws IOException{
Scanner scanner = new Scanner(new File(file1));
ArrayList<ArrayList<String>> arr = new ArrayList<ArrayList<String>>();
ArrayList<String> a = null;
boolean check = false;
while(scanner.hasNextLine())
{
String str = scanner.nextLine();
String[] stringArr = str.split(" +");
for(int i=0; i<stringArr.length; i++){
a.add(stringArr[i]); //null exception being thrown here
}
stringArr = null;
arr.add(a);
a.clear();
}
return arr;
}
答案 0 :(得分:1)
因为这个:
ArrayList<String> a = null;
ArrayList已声明但未初始化。因此,当您访问for循环中的ArrayList时,您基本上是访问引用null的变量a。
相反,请执行:
ArrayList<String> a = new ArrayList<String>();
此外,您的代码中还有另一个问题:
您希望创建一个ArrayList的ArrayList,您在该循环中传递相同对象的引用(不在循环中创建新的ArrayList)并在for循环结束时清除它。这会导致将相同的ArrayList添加到ArrayList<ArrayList<>>
的所有索引中。
您必须为要在arrayList中插入的每个新行执行new ArrayList<String>()
。
修改代码以执行相同的操作:
public static ArrayList<ArrayList<String>> addAfter(String file1)throws IOException{
Scanner scanner = new Scanner(new File(file1));
ArrayList<ArrayList<String>> arr = new ArrayList<ArrayList<String>>();
ArrayList<String> a = null;
boolean check = false;
while(scanner.hasNextLine())
{
a = new ArrayList<String>(); // add this
String str = scanner.nextLine();
String[] stringArr = str.split(" +");
for(int i=0; i<stringArr.length; i++){
a.add(stringArr[i]); //null exception being thrown here
}
stringArr = null;
arr.add(a);
//a.clear(); -- remove this line
}
return arr;
在Java中,您传递引用而不是值(对象)。
答案 1 :(得分:1)
您没有初始化“a”ArrayList对象。
ArrayList<String> a = new ArrayList<>();
而不是
ArrayList<String> a = null;
在Java中,对象变量不包含对象本身,而是对对象在内存中的实际位置的引用。当您获得NullPointerException时,这意味着Java无法访问对象,因为对象变量为null而不是对对象的引用。
答案 2 :(得分:1)
使用此功能。
ArrayList<String> a = new ArrayList<>();