Java readLine()等待控制台的输入

Java readLine()等待控制台的输入,java,console,bufferedreader,readline,lines,Java,Console,Bufferedreader,Readline,Lines,我正试图从控制台读几行文字。行数事先不知道。方法读取一行,但在最后一行之后,它会等待控制台的输入。为了避免这种情况,应该做些什么 请参阅下面的代码片段: public static String[] getLinesFromConsole() { String strLine = ""; try { // Get the object of DataInputStream InputStreamReader isr = new InputS

我正试图从控制台读几行文字。行数事先不知道。方法读取一行,但在最后一行之后,它会等待控制台的输入。为了避免这种情况,应该做些什么

请参阅下面的代码片段:

    public static String[] getLinesFromConsole() {
    String strLine = "";
    try {
        // Get the object of DataInputStream
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(isr);
        String line = "";
        while ((line = br.readLine()) != null)
            strLine += line + "~"; //edited

        isr.close();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
    return strLine.split("~");
}

下面的代码可能会修复,用特定于需求的字符串替换文本
exit

  public static String[] getLinesFromConsole() {
    String strLine = "";
    try {
        // Get the object of DataInputStream
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(isr);
        String line = "";
        while ((line = br.readLine()) != null && !line.equals("exit") )
            strLine += br.readLine() + "~";

        isr.close();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
    return strLine.split("~");
}

从控制台读取时,您需要定义一个“终止”输入,因为控制台(与文件不同)永远不会“结束”(即使在程序终止后,它仍会继续运行)

您的问题有几种解决方案:

  • 将输入放入文件并使用IO重定向:
    java…<输入文件

    shell将把您的进程与输入文件连接起来,您将得到一个EOF

  • 键入控制台的EOF字符。在Linux和Mac上是Ctrl+D,在Windows上是Ctrl+Z+Enter

  • 读空行时停止。这样,用户只需输入Enter即可


  • PS:您的代码中有一个bug。如果调用
    readLine()
    两次,它将跳过每一行。

    我猜代码永远不会退出while循环。没错。一个想法是,当你读一些特定的东西时,比如“退出”,你可能会中断。这不应该是
    而((line=br.readLine())!=null)strLine+=**line**+“~”?您应该使用某些条件退出while循环,例如,让用户类型exit您似乎每秒钟跳过一行,我怀疑这是不正确的,并且您正在等待输入流的结束,这对于大多数控制台用户来说是很难键入的。;)当((line=br.readline())!=null)strLine+=//此处br.readline()+“~”;第二次调用readline时,我会尝试您的代码;控制台开始等待另一个字符;您应该使用行变量OldCurmudgeon来建议此解决方案。您可以确定退出命令。是否可以在没有退出字符串的情况下结束readLine执行?要重新发送文本输入过程,您需要一些“文本”来指示退出或退出。