【问题标题】:BufferedReader readLine() not working in a while loopBufferedReader readLine() 在 while 循环中不起作用
【发布时间】:2018-09-10 03:50:52
【问题描述】:

当我在 while 循环块中调用 readLine() 时,不知何故,即使我按下了 enter,输入也不会完成。看起来,它创建了一个新行,但仍在等待行输入终止。

public static void main(String[] args) throws IOException {
  // TODO Auto-generated method stub
  InputStreamReader isr = new InputStreamReader(System.in);
  BufferedReader br = new BufferedReader(isr);

  String line = "";
  while(!line.equals("End")){
    line = br.readLine();
    System.out.println("String from keyboard not working : "+line+"\n");
  }
  
  while((line = br.readLine())!=null) {
    System.out.println("String from keyboard in while loop : "+line+"\n");
  }
}

当我将 readline() 放在 while 的条件部分之上时,它可以正常工作。 我想知道为什么前者不起作用。

【问题讨论】:

    标签: java bufferedreader


    【解决方案1】:

    不太清楚你认为自己遇到了什么麻烦

    但是如果我在输入时运行你的代码

    test
    String from keyboard not working : test
    
    End
    String from keyboard not working : End
    
    kkk
    String from keyboard in while loop : kkk
    

    然后如果我输入 ctrl-d 然后第二个循环将终止

    即使我按下回车,enter 也不会终止输入,试试ctrl-d

    【讨论】:

      【解决方案2】:
      while(!line.equals("End")){
          line = br.readLine();
          System.out.println("String from keyboard not working : "+line+"\n");
      }
      

      这个块工作正常。在此输入End 后,它将打印结束一次并终止。打印的原因是在循环的下一个循环中检查条件。

      while((line = br.readLine())!=null) {
          System.out.println("String from keyboard in while loop : "+line+"\n")
      }
      

      此块不会终止,因为每次您点击 Enter 终端都会发送一个空字符串。因此,如果您希望它在按 Enter 时终止,请将条件更改为

      while(!(line = br.readLine()).equals(""))
      

      【讨论】:

        【解决方案3】:

        在从 bufferedReader 放入任何数据之前,您首先调用了 line 变量。第一个while循环将“END”与“”进行比较,所以,显然是错误的。

        【讨论】:

          猜你喜欢
          • 2015-07-13
          • 1970-01-01
          • 2018-05-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多