【问题标题】:NoSuchElementException on Scanner, how do i get rid of it?扫描仪上的 NoSuchElementException,我该如何摆脱它?
【发布时间】:2021-02-16 03:10:18
【问题描述】:
Scanner s = new Scanner(new File(filename));
        while (s.hasNext()) 
        {
            if(s.next().contains(","))
            {
                String str= s.next().replaceAll("[^a-zA-Z0-9]", "");
                List<String> brokenSentence = Arrays.asList(str.split(","));
                writer.write(brokenSentence +"\n");
            }
            else
            {
                String edited = s.next().replaceAll("[^a-zA-Z0-9]", "");//error  
                writer.write(edited +"\n");
            }
        }
        s.close();

如果没有上面的 if,有错误的行完美运行,我真的需要那部分。请帮我。错误是:

Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.Scanner.throwFor(Scanner.java:937)
at java.base/java.util.Scanner.next(Scanner.java:1478)
at Programming_2021/free_time.Gutenburg2.main(Gutenburg2.java:67)

【问题讨论】:

  • 您从中得到的确切错误是什么?您能否通过edit 提供问题中的完整信息?
  • 不要调用s.next() 两次。
  • 我将如何只使用它的一个实例?我应该将它存储在字符串中吗?

标签: java java.util.scanner nosuchelementexception


【解决方案1】:

不要调用s.next() 两次,而是将第一次调用的结果赋给一个变量:

while (s.hasNext()) {
    String value = s.next();
        
    if(value.contains(",")) {
        String str = value.replaceAll("[^a-zA-Z0-9]", "");
        List<String> brokenSentence = Arrays.asList(str.split(","));
        writer.write(brokenSentence +"\n");
    } else {
        String edited = value.replaceAll("[^a-zA-Z0-9]", "");
        writer.write(edited +"\n");
    }
}

继续调用s.next() 将继续使用扫描仪中的值。这些值不一定存在,因为您只使用s.hasNext() 检查了一个值是否存在。

【讨论】:

  • 漂亮,谢谢!我现在的问题是,当 if 被激起时,由于数组的原因,答案会像这样 [words] 打印出来,有没有办法解决这个问题?
  • 你想打印什么?
  • 我想打印;单词,基本上没有大括号
  • 如果你有多个元素怎么办?
  • 所有单词都必须在一个新的行上,分割在那里,所以逗号的东西在每一行被分割成新的单词。
猜你喜欢
  • 2013-03-04
  • 1970-01-01
  • 2015-09-06
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多