java - NoSuchElementException : No line found (using hasNextLine()

标签 java java.util.scanner

在我相对较短的编程生涯中,我第一次遇到了 NoSuchElementException。我做了一些研究,但我发现的帖子都没有追溯到类似的案例。在许多情况下,编码员只需 not put in hasNextLine() ,从而导致异常。另一个例子是当编码员尝试read two lines consequently时,这也导致了错误。第三次尝试得到了一个解决方案 check for an empty line at the end ,我觉得这可能更接近我的问题。但是,我不认为这是我正在寻找的解决方案。这是我的代码:

import java.util.HashMap; import java.util.Scanner; import java.io.*;

class DVDAdministrasjon
{
  private String eier;
  private String laaner;
  private boolean utlaant;
  private String tittel;

  private HashMap<String, DVD> dvdListe = new HashMap<String, DVD>();
  private HashMap<String, Person> personListe = new HashMap<String, Person>();

  public void lesDVDarkiv(String filnavn) throws Exception
  {
    Scanner fil = new Scanner(new File(filnavn));
    String curDVD = "";
    String inData; //lagrer data fra filen

    while (fil.hasNextLine())
    {
      inData = fil.nextLine();
      while (inData.equals("")) //Hopper over eventuelle linjeskift
      {
        inData = fil.nextLine();
      }
      if (inData.equals("-"))
      {
        inData = fil.nextLine();
        personListe.put(inData, new Person(inData));
      }
      else
      {
        inData = fil.nextLine();
        curDVD = inData;
        dvdListe.put(inData, new DVD(inData));
        if (curDVD.substring(0,1).equalsIgnoreCase("*"))
        {
          utlaant = true;
        }
      }
    }
  }
}

这是类:

import java.util.Scanner; import java.io.File;

class Oblig7Test1
{
  public static void main(String[] args) throws Exception
  {
    Scanner in = new Scanner(System.in);
    DVDAdministrasjon dListe = new DVDAdministrasjon();
    dListe.lesDVDarkiv("dvdarkiv2.txt");
  }
}

请记住,该计划将远远超出现在可见的范围。这也是一项作业,但我只对为什么会收到错误感兴趣。该文件由多行组成,某些行中包含多个单词,某些行的开头用“*”,某些行之间用“-”作为分隔符。

错误如下所示:

java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Scanner.java:1540)
    at DVDAdministrasjon.lesDVDarkiv(DVDAdministrasjon.java:29)
    at Oblig7Test1.main(Oblig7Test1.java:9)

最佳答案

在您的代码中我添加了一些注释

while (fil.hasNextLine())  // if it enters here it has more lines
{
  inData = fil.nextLine();  // OK can read as hasNextLine returned true
  while (inData.equals("")) 
  {
    inData = fil.nextLine();  // NO guarantee that there is a `nextLine`

在不完全理解您的代码的情况下,我建议如果您需要阅读下一行,那么您应该contune到循环的顶部或使用if (fil.hasNextLine ())

关于java - NoSuchElementException : No line found (using hasNextLine(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40296004/

相关文章:

java - 更改 NatTable 中选定行的颜色

java - Android 简单计算器

java - 如何在 Android 中动态创建 CardView

java - BufferedReader 相对于 Scanner 有什么好处

java - 拆分命令不适用于扫描仪

java - pack200可以用来压缩class文件在jdk 1.4上运行吗?

java - 如何根据收到的 XML 解码到不同的对象?

java - 扫描仪未发现线路异常

Java程序无法读取字符

java - HackerRank 扫描器类 Java