【问题标题】:Java: can't get readline() to workJava:无法让 readline() 工作
【发布时间】:2016-07-09 23:50:15
【问题描述】:

我正在尝试为一个竞争性编程问题解析一些输入测试用例,但即使我正在阅读整行和“\n”字符,程序也只是坐着等待。

代码如下:

public static void main(String[] args) throws IOException {
    String result = "", input = "";
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    while((input = br.readLine()) != null){
        result += input;   
    }
    System.out.print(result);
}

这是超级简化的,但它仍然不起作用。当我输入时(不带引号) "1 2 3 4 5 6 7 8 9" 然后回车,它只是等待更多的输入。我怎样才能让它工作,以便在我按 enter 后,程序离开 while 循环?

我是否也可以将这项工作用于多行?例如,在最后一个“\n”之后,如果没有更多字符,则跳出循环。

感谢您的帮助。 :)

【问题讨论】:

  • 为什么需要一个while循环?
  • 这是 2016 年。为什么不使用 try-with-resources?
  • 我想输入可变数量的行。
  • 老兄按enterCtrl + Z(Windows)、Ctrl + D(Linux)、Cmd + D(Mac)
  • @Misha,这是向操作系统发出的输入流已经结束的信号。 IE。这里没什么可看的,继续前进

标签: java input io


【解决方案1】:

只需致电readLine() 一次。你有它在一个循环。如果你调用它一次,它应该读到一行。

这是readLine()上的文档:http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine()

它表明它只有在到达流的末尾时才会返回null。当您使用System.in 作为输入流时,您不会仅按回车键到达它的末尾。

【讨论】:

  • 感谢您帮助我意识到我可以通过按 Enter 来结束 System.in 输入流
  • @Misha 不,你不能。您可以根据您的系统键入 Ctrl/d 或 Ctrl/z 来结束它。 Enter 仅终止单行。
  • 对不起。错字,我的意思是不能
【解决方案2】:

在 Windows 上按 enterctrl + z、Linux 上按 ctrl + d 或 Mac 上按 cmd + d 之后。

这些键盘快捷键在各自的操作系统中使用,向操作系统发出 EOF 信号,操作系统反过来通知 jvm。

不使用cmd + d 的另一种方法是执行java myprogram <<< "1 2 3 4 5 6 7 8 9" 或将字符串放入文件调用myprogram.in 然后执行java myprogram < `cat myprogram.in`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 2016-03-22
    • 2014-11-22
    • 2012-06-08
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    相关资源
    最近更新 更多