Java从用户获取字符串输入,NoSuchElementException:找不到行

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

我正在使用以下代码(我希望),它工作正常,我正在采取多个输入,名称,地址等。我也使用它cin()来按任何关键功能。它以某种方式被打破并按照预期停止工作。

public class A {
    Scanner s = new Scanner(System.in);

    public String cin() {
        return s.nextLine();
    }
}

抛出的错误如下

Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Scanner.java:1540)

我试着用s.hasNext()s.hasNextLine(),它没有进入状态,因此没有输入来自用户的拍摄。

我知道这是非常基本的,我即将完成我的工作,这个突然的问题让我归零。我也尝试了循环方式但是陷入了无限循环。

是否可以在没有 exception没有输入的情况下输入skipping,我想要一条忽略以前的东西并强行从用户那里获取输入的行?

请注意我cin()在需要输入的整个应用程序中使用(并且它正在工作)。

可能性:

  1. 是否可能是因为屏幕上印有任何字符?
  2. 也许System.in被任何其他类或lib使用???

很奇怪cin()在写这行之前找到了另外一个地方

try(Scanner scanner = new Scanner(System.in)) {
}

我从试用口袋中删除它,现在它再次正常工作,为什么会发生这种情况(请注意这是在另一个类中完成的,并采用整数输入,这是正常工作)。

提问于
用户回答回答于

你需要使用hasNextLine()

就像是:

public String cin() {
    return s.hasNextLine() ? s.nextLine() : null;
}

要么

public Optional<String> cin() {
    return s.hasNextLine() ? Optional.of(s.nextLine()) : Optional.empty();
}

您尝试使用hasNext(),但可能会true在输入行之前返回。

用户回答回答于

根据文件:

@throws NoSuchElementException如果没有找到行。

应该有一个行分隔符匹配行尾的\r\n|[\n\r\u2028\u2029\u0085]正则表达式。

您的输入也应该与模式匹配 .*(\r\n|[\n\r\u2028\u2029\u0085])|.+$

你是如何使用这种cin()方法的?

扫码关注云+社区

领取腾讯云代金券