Java BufferedReader readLine()在while循环中不工作

Java BufferedReader readLine()在while循环中不工作,java,bufferedreader,Java,Bufferedreader,当我在while循环块内调用readLine()时,不知何故,即使我按下enter键,输入也不会完成。看起来,它创建了一个新行,但仍在等待行输入终止 public static void main(String[] args) throws IOException { // TODO Auto-generated method stub InputStreamReader isr = new InputStreamReader(System.in); BufferedReader b

当我在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的condition部分的顶部时,它可以正常工作。
我想知道为什么前一个while不起作用。

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

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

while(!line.equals("End")){
    line = br.readLine();
    System.out.println("String from keyboard not working : "+line+"\n");
}
这个街区很好用。在该对话框中,一旦输入
End
,它将打印一次End并终止。打印的原因是在循环的下一个循环中检查条件

while((line = br.readLine())!=null) {
    System.out.println("String from keyboard in while loop : "+line+"\n")
}
此块不会终止,因为每次按Enter键时,终端都会发送一个空字符串。因此,如果要在按Enter键时终止,请将条件更改为

while(!(line = br.readLine()).equals(""))
这个街区很好用。在该对话框中,一旦输入
End
,它将打印一次End并终止。打印的原因是在循环的下一个循环中检查条件

while((line = br.readLine())!=null) {
    System.out.println("String from keyboard in while loop : "+line+"\n")
}
此块不会终止,因为每次按Enter键时,终端都会发送一个空字符串。因此,如果要在按Enter键时终止,请将条件更改为

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

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

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

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键,
enter
也不会终止输入,请尝试
ctrl-d

不太确定您认为自己遇到了什么问题

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

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键,
enter
也不会终止输入,请尝试
ctrl-d