【问题标题】:Java InputMismatchException error when scanning from file从文件扫描时出现 Java InputMismatchException 错误
【发布时间】:2017-10-11 01:29:42
【问题描述】:

程序正在从 .txt 文件中读取。 Scanner 会抛出以下错误:

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at project.pkg2.Project2.main(Project2.java:38)
Java returned: 1
BUILD FAILED (total time: 0 seconds)

这是从文件中读取所有内容的代码。我们有一个整数,它是特定专辑的曲目数。然后我们在每一行都有一个曲目号、歌曲标题和艺术家。曲目编号、标题和艺术家只需用逗号分隔。

【问题讨论】:

  • 你能分享创建扫描仪的行吗?
  • sc.next() 在遇到空格“”时停止。这不是你想要的。您可能希望使用 sc.nextLine() 获取所有内容并使用 String.split() 将 String 拆分为 trackNumber(您需要通过异常处理将其转换为 int)、 songName 和 artistName。

标签: java file java.util.scanner


【解决方案1】:

默认情况下,Scanner 有一个JavaWhiteSpace 分隔符,当您执行trackNumber = sc.nextInt(); 时,它会得到“1”,并尝试将其解析为int,这显然会失败。 还有,你得到trackCount后忘记收集endline了。

这是你应该做的:

trackCount = sc.nextInt();
sc.nextLine(); // collect endline character
sc.useDelimiter(", ");
albumName = f.toString();
while (sc.hasNextLine()) {
    trackNumber = sc.nextInt();
    songName = sc.next();
    artistName = sc.next();
    sc.nextLine(); // collect endline character

    processLine(albumName, artistName, songName, trackNumber);
}
sc.close();

【讨论】:

  • 谢谢。但是,当我调用一个函数时,我现在得到一个与第 47 行有关的空指针异常。所以我不确定什么没有被初始化。 project.pkg2.Project2.processLine(Project2.java:74) at project.pkg2.Project2.main(Project2.java:47) 的线程“main”java.lang.NullPointerException 中的异常 Java 返回:1 BUILD FAILED(总时间: 0 秒)
  • @cheetodog 这与这个问题完全无关!我的回答解决了您最初的问题,我已经亲自测试过它并且有效! NullPointerException 通常意味着您正在尝试从空引用中读取。我建议您查看albumName,因为文件的内容被正确解析!
猜你喜欢
  • 1970-01-01
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
相关资源
最近更新 更多