Java - 字符串数组上的空指针异常
Java - Null Pointer Exception on String array
这是我正在处理的代码。它在一个方法中,其想法是打开一个文件并检查内容,或缺少内容,并报告回来。
但是我在下面指向的行上得到了 NullPointerException
。
我不知道如何解决这个问题。我试过调试,显示当时该行是 运行 String[]
的第一个元素包含文本,所以这不是问题。
int i = 0;
int numChar=1, numLines;
String[] line = new String[1000];
try {
BufferedReader in = new BufferedReader(new FileReader(file));
try {
while(numChar > 0) {
//String[] line = new String[1000];
line[i] = in.readLine();
PROBLEM--> numChar = line[1].length();
i++;
}
} catch (EOFException ex) {
JOptionPane.showMessageDialog( null, "Error" );
//break;
}
}
catch(IOException e) {
JOptionPane.showMessageDialog( null, "Missing file or no data to read." );
System.out.println("IO Error - Missing file");
}
我怀疑您只需要更改数组访问索引以使用 i
而不是 1
。
numChar = line[i].length();
您还应该检查 null
,因为 BufferedReader
将 return (from the docs):
null if the end of the stream has been reached
numChar = line[i] == null ? 0 : line[i].length;
您可能想要扩展它以便跳出循环而不是分配 null 长度。
String s = in.readLine();
if (s == null) {
break;
}
else {
line[i] = s;
numChar = line[i++].length();
}
编辑 回应评论。
冒着混淆问题的风险,我倾向于重写你的循环。你似乎不需要 numChars
循环外,所以我会删除它以减少你的方法范围的变量。我还怀疑您不想在流的末尾停止阅读空行:
while (true) { // for(;;) if you prefer
String s = in.readLine();
//if (s == null || s.length() == 0) break; // stop on empty lines and end of stream
if (s == null) break; // stop at end of stream only
line[i++] = s;
}
这是我正在处理的代码。它在一个方法中,其想法是打开一个文件并检查内容,或缺少内容,并报告回来。
但是我在下面指向的行上得到了 NullPointerException
。
我不知道如何解决这个问题。我试过调试,显示当时该行是 运行 String[]
的第一个元素包含文本,所以这不是问题。
int i = 0;
int numChar=1, numLines;
String[] line = new String[1000];
try {
BufferedReader in = new BufferedReader(new FileReader(file));
try {
while(numChar > 0) {
//String[] line = new String[1000];
line[i] = in.readLine();
PROBLEM--> numChar = line[1].length();
i++;
}
} catch (EOFException ex) {
JOptionPane.showMessageDialog( null, "Error" );
//break;
}
}
catch(IOException e) {
JOptionPane.showMessageDialog( null, "Missing file or no data to read." );
System.out.println("IO Error - Missing file");
}
我怀疑您只需要更改数组访问索引以使用 i
而不是 1
。
numChar = line[i].length();
您还应该检查 null
,因为 BufferedReader
将 return (from the docs):
null if the end of the stream has been reached
numChar = line[i] == null ? 0 : line[i].length;
您可能想要扩展它以便跳出循环而不是分配 null 长度。
String s = in.readLine();
if (s == null) {
break;
}
else {
line[i] = s;
numChar = line[i++].length();
}
编辑 回应评论。
冒着混淆问题的风险,我倾向于重写你的循环。你似乎不需要 numChars
循环外,所以我会删除它以减少你的方法范围的变量。我还怀疑您不想在流的末尾停止阅读空行:
while (true) { // for(;;) if you prefer
String s = in.readLine();
//if (s == null || s.length() == 0) break; // stop on empty lines and end of stream
if (s == null) break; // stop at end of stream only
line[i++] = s;
}