【问题标题】:Restrict EOF on newline java限制换行java上的EOF
【发布时间】:2014-11-28 18:38:40
【问题描述】:

我通过this 问题在 Java 中获得了正确的 EOF 标准,并且运行良好。但是当程序需要在每个输入案例之后输入一个空行时,就会出现问题。以下代码适用于 EOF。

    String line;
    BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
    try {
        while((line = read.readLine()) != null){
            n = Integer.parseInt(line);
        }
    }
     catch (IOException e) {} 

但问题是,我必须解决一个问题,即在输入每个案例后,都会输入一个空白的新行。结果我得到了一个 NumberFormatException ,这也是预期的。我已经尝试了所有我能做的,包括 try-catch() 机制。

如果我的代码不会终止或在空白行输入时抛出异常,那就太好了。

【问题讨论】:

  • 只检查行的长度? if(line.length()>0) { 做任何事; }
  • 它就像一个魅力!应该是一个答案...... !!!
  • 我已将其添加为答案 :) 请将其标记为已接受或投赞成票!

标签: java newline bufferedreader eof


【解决方案1】:

可能最好的方法是在做任何事情之前检查输入的长度。所以:

if(line.length() > 0) {
    //do whatever you want
}

【讨论】:

  • 它正在工作,但如果有空格然后按 Enter,它仍然会给出 NumberFormatException。所以,问题还是没有解决。基本上我想要一个在在线程序提交中支持 EOF 的 java 代码。我以前的代码工作正常,但它不支持 EOF。澄清一下,我正在处理uva.onlinejudge.org/external/110/11060.html,它需要在每个测试用例之后都有空行。 ..
  • 这是我的最终代码以及您建议的修改。 pastebin.com/AmqFg9gY@Alex K
【解决方案2】:

你可以检查是否

"".equals(line.trim())

在尝试将其转换为整数之前。

但更好的方法是使用Scanner,然后使用Scanner.nextInt() 获取下一个令牌。这将自动处理空白。

【讨论】:

  • 一行中可能有多个空格,如" " int 这种情况??
  • @MiyaG 好吧,我已经添加了一些东西来解决这个问题,但是 OP 确实说 blank 新行...
  • 此外,由于我正在为编程比赛解决问题,所以 Scanner 大部分时间都会以 TLE 结束。
【解决方案3】:

试试这个。

String line;
    BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
    try {
        while((line = read.readLine()) != null){
          line.replaceAll(" ","");
               if(line.length()>0){
            n = Integer.parseInt(line);
                     }
        }
    }
     catch (IOException e) {} 

【讨论】:

  • 我已经添加了line.replaceAll(" ", ""); 行,但它不起作用。如果我输入一个空格并按 Enter,我会得到相同的 NumberFormatException ..
  • @TahmidNips 你能简单说明一下吗?
  • 更具体地说,我想要一个以适当方式支持 EOF 的 Java 代码。此pastebin.com/AmqFg9gY 代码适用于此uva.onlinejudge.org/external/110/11060.html 问题。但是如果我输入一个空格然后按回车键,它会抛出 NumberFormatException。所以我需要一个在执行 EOF 时不会提供任何异常的 Java 模板。 @Miya G
【解决方案4】:

您可以在 while 循环中使用 try-catch 块,如果您捕获到异常,则继续进行下一次迭代。这不是最好的解决方案,但对你来说它应该可以工作。

String line;
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
try {
    while((line = read.readLine()) != null) {
        try {
            n = Integer.parseInt(line);
            //other stuff with n
        } catch (NumberFormatException e) {
              continue; // do nothing, and move on to the next line
        }
    }
}
 catch (IOException e) {} 

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 2013-07-31
    • 1970-01-01
    • 2015-03-04
    相关资源
    最近更新 更多