Java中的标准输入为Null



我正在开发一个小程序,用户在标准输入中输入文本,然后返回正确对齐的文本。

我的主要代码块是逐行读取输入的:

public static void main(String[] args) {       
   try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {                               
            for (String nextLine, line = br.readLine(); line != null; line = nextLine) {                
                nextLine = br.readLine();
                // Work with "line"
            }
   }
   catch (IOException ex) {         
        System.exit(-1);
   }
}

但输入永远不会全部读取。总是缺少最后一行,并且line永远不是null。经过一点调试,我发现nextLine = br.readLine();行的br.readLine()不返回任何内容(实际上它不返回任何东西。不过没有抛出异常。)并且程序一直在运行,但没有执行我的任何其他代码行。我还试着从文件中读取,但没有出现这个问题。

这可能是因为readLine()会阻塞,直到有新行可用或流到达EOF(从System.in读取时从未发生过这种情况)。您永远不会得到最后一个输入,因为您的循环总是处理先前读取的行。

试试这个:

for (String line; (line = br.readLine()) != null;) 

当你已经阅读了所有你需要的输入时,打破这个循环,例如:

 if(line.equals("finish")){
     break;
 }

当您的输入来自标准输入时,您必须让程序知道输入何时结束。否则,它将继续等待输入下一个输入。

因此,您应该决定一些字符或字符串来标记输入的结束。

例如,在这里键入done将结束循环:

public static void main(String[] args) {       
   try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {                               
            for (String nextLine, line = br.readLine(); line != null && !line.equals("done"); line = nextLine) {                
                nextLine = br.readLine();
                // Work with "line"
            }
   }
   catch (IOException ex) {         
        System.exit(-1);
   }
}

相关内容

  • 没有找到相关文章

最新更新