所以我正在编写一个java程序,该程序应该继续分析用户的字符串,直到标准输入结束(直到他们按下CTRL + D或输入文件的结尾)。该程序按预期工作,但是当我按CTRL + D时,有一个空指针异常。以下是有问题的代码:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line = " ";
while (line != null) {
line = in.readLine();
String[] tokens = line.split(" ");
System.out.println(line); ......
空指针的目标是 String [] tokens = line.split("");
看起来代码试图将一行为空标记。但我以为我写的方式永远不会尝试标记空行。任何人都可以帮助我吗?
答案 0 :(得分:2)
将您的while循环更改为: -
while ((line = in.readLine())!= null) {
删除其中的第一行。
请注意,您正在读取循环内部的行,然后再进行测试。所以,你会在文件的末尾找到NPE
。
另外,如果您在阅读后对文件进行标记,我宁愿使用Scanner
类。
答案 1 :(得分:0)
问题是while
是预检条件。在循环开始时,line
不为空。您应该使用do-while
代替。
while (line != null) {
line = in.readLine(); // in the loop, but in.readLine() returns null
String[] tokens = line.split(" "); // OH SHI- LINE IS NULL
System.out.println(line);