Java - 字符串数组上的空指针异常

时间:2015-01-31 14:15:34

标签: java arrays string nullpointerexception

这是我正在处理的代码。它位于一个方法中,其目的是打开一个文件,检查内容,或缺少内容,并报告回来。

但是我在下面指出的那一行上得到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");
}   

1 个答案:

答案 0 :(得分:2)

我怀疑你只需要更改数组访问索引以使用i而不是1

numChar = line[i].length();

您还应检查null BufferedReader将返回(from the docs):

  

如果已到达流的末尾,则返回null

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;
}