7

我正在尝试从控制台读取文本行。行数事先不知道。BufferedReader.readLine() 方法读取一行,但在最后一行之后它等待来自控制台的输入。应该怎么做才能避免这种情况?

请看下面的代码片段:

    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("~");
}
4

2 回答 2

4

下面的代码可能会修复,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("~");
}
于 2013-01-29T10:57:27.853 回答
1

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

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

  1. 将输入放入文件并使用 IO 重定向:java ... < input-file

    shell 会将您的进程与输入文件挂钩,您将获得一个 EOF。

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

  3. 当你读到一个空行时停止。这样,用户可以简单地键入Enter.

PS:您的代码中存在错误。如果您调用readLine()两次,它将每隔一行跳过一次。

于 2013-01-29T10:59:21.263 回答