我在以下代码中遇到null-exception throw错误。可能是什么原因?
public static String[] CreateVocab(BufferedReader buffR) throws IOException{
String[] arr = null;
int i = 0;
arr[i]= null;
String line = new String();
while((line = buffR.readLine()) != null){
arr[i] = line;
i=i+1;
}
return arr;
}
编译器在代码中显示Null ponter异常
arr[i]=null
。
答案 0 :(得分:6)
这是原因:
String[] arr = null;
int i = 0;
arr[i]= null; // 'arr' is null
由于读取的行数未知,建议使用ArrayList<String>
存储读取的行,并使用ArrayList.toArray()
返回String[]
(如果返回ArrayList<String>
是不可接受的。)
返回List<String>
:
public static List<String> CreateVocab(BufferedReader buffR)
throws IOException
{
List<String> arr = new ArrayList<String>();
String line;
while((line = buffR.readLine()) != null){
arr.add(line);
}
return arr;
}
要将数组更改return
返回到:
return arr.toArray(new String[]{});
答案 1 :(得分:3)
您还没有创建数组 - 并且数组无论如何都无法解决您的问题,因为它无法调整大小。我们事先并不知道行数。
改为使用集合:
public static String[] CreateVocab(BufferedReader buffR) throws IOException{
List<String> lines = new ArrayList<String>();
String line = null;
while((line = buffR.readLine()) != null){
lines.add(line);
}
return lines.toArray(new String[]{});
}
答案 2 :(得分:1)
String[] arr = null; //here you are setting arr to null
int i = 0;
arr[i]= null; // here you are trying to reference arr