java - Java 标准输入中的空值

标签 java stream

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

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

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

关于java - Java 标准输入中的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33707810/

相关文章:

java - 将任何集合扭曲成 map

c++ - 将 false 转换为指针类型 void*?

performance - 从 Haskell 中的 monadic 流中榨取更多性能

Java Android、倒数计时器和 ProgressBar(先读)

java Apache POI Word 现有表格插入带有单元格样式和格式的行

java - 如何强制实现类从一个或另一个子类继承?

javascript - 如何将高地流转为节点可读流?

java - 如何优化代码(java)

对 N 个数据流进行时间排序的算法

perl - 需要帮助,使用perl解析来自PHP套接字服务器的流数据