2016-11-12 12 views
1

私はJavaをかなり使い慣れていて、スキャナと例外を理解するのは難しいです。それは "while(!line.matches(" [\ n \ r] + "))"でNullPointerExceptionを表示しています。なぜこれが起こっているのかは分かりません。私はライン変数を初期化しました。そして、スキャナの次のラインがブレークラインであれば、whileループは終了するはずです。次の行がヌルの場合、外側のループ全体が終了します。なぜこれはNullPointerExceptionを返すのですか?Javaでテキストファイルを解析する - 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(); 
     } 
    } 
} 

}

答えて

4

あなたの内側のループもbr.readLine()を呼び出しますので、あなたはnullをチェックする必要があります。理にかなって

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

または

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

のようなものに

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

を変更して、ありがとうございました! – stealingbikes

関連する問題