在Java中解析文本文件-需要了解NullPointerException的帮助吗

在Java中解析文本文件-需要了解NullPointerException的帮助吗,java,nullpointerexception,text-files,Java,Nullpointerexception,Text Files,我是Java新手,很难理解扫描器和异常。它在“while(!line.matches([\n\r]+”)处显示NullPointerException。我真的不知道为什么会这样。我已经初始化了line变量,并且假设如果扫描器的下一行是断线,那么while循环应该结束。如果下一行为空,则整个外部循环应结束。为什么会返回NullPointerException public class Readfile { private static int inputs = 0; public void ma

我是Java新手,很难理解扫描器和异常。它在“while(!line.matches([\n\r]+”)处显示NullPointerException。我真的不知道为什么会这样。我已经初始化了line变量,并且假设如果扫描器的下一行是断线,那么while循环应该结束。如果下一行为空,则整个外部循环应结束。为什么会返回NullPointerException

public class Readfile {
private static int inputs = 0;

public void main(String filename) throws Exception {
    URL url = getClass().getResource(filename);
    File file = new File(url.getPath());
    parsefile(file);

}

void parsefile(File file) throws Exception {
    ArrayList<String[]> Inputs = new ArrayList<String[]>();
    BufferedReader br = new BufferedReader(new FileReader(file));
    String line = br.readLine();
    while (line != null){
        LinkedList currentinput = new LinkedList();
        if (line.contains("Input")){
            while (! line.matches("[\\n\\r]+")) {
                System.out.println(line);
                line = br.readLine();
            }
        }else{
            line = br.readLine();
        }
    }
}
公共类读取文件{
专用静态int输入=0;
public void main(字符串文件名)引发异常{
URL=getClass().getResource(文件名);
File File=新文件(url.getPath());
解析文件(file);
}
void parsefile(文件文件)引发异常{
ArrayList输入=新的ArrayList();
BufferedReader br=新的BufferedReader(新文件读取器(文件));
String line=br.readLine();
while(行!=null){
LinkedList currentinput=新建LinkedList();
如果(第行包含(“输入”)){
而(!line.matches(“[\\n\\r]+”){
系统输出打印项次(行);
line=br.readLine();
}
}否则{
line=br.readLine();
}
}
}

}

您的内部循环还调用
br.readLine()
,因此需要检查
null
。改变

while (! line.matches("[\\n\\r]+")) {
差不多

while (line != null && ! line.matches("[\\n\\r]+")) {

while (! line.matches("[\\n\\r]+")) {
    System.out.println(line);
    line = br.readLine();
    if (line == null) {
        break;
    }
}

内部循环还调用
br.readLine()
,因此需要检查
null
。改变

while (! line.matches("[\\n\\r]+")) {
差不多

while (line != null && ! line.matches("[\\n\\r]+")) {

while (! line.matches("[\\n\\r]+")) {
    System.out.println(line);
    line = br.readLine();
    if (line == null) {
        break;
    }
}