Java - 读取文本文件的第一个字

标签 java java.util.scanner

我无法阅读文本文件的第一个单词。如果第一个单词等于“Circle”,我想在我的数组中创建一个新的 Circle 对象。

            FileInputStream fileIn = new FileInputStream("shapeFile.txt");
            Scanner scan = new Scanner(fileIn);
            while(scan.hasNextLine()) {
                String shape = scan.next();
                if(shape.equals("Circle")) {
                  myShapes.addShape(new Circle(scan.nextInt(), scan.nextInt(), scan.nextInt(), Color.RED));
                }
            }

上面的代码出现以下错误,指向 String shape = scan.next(); 行;

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1371)
    at shapes.ShapeManagement.main(ShapeManagement.java:151)
Java Result: 1

如果有人能帮助我解决这个问题,我将不胜感激。

最佳答案

你可能得到这个异常的原因是因为 scan.hasNextLine() 可以返回 true 即使该行上没有标记。如果您在标记后没有标记时调用 scan.next(),您将得到您所看到的 java.util.NoSuchElementException

因此,将 scan.hasNextLine() 换成 scan.hasNext()

或者,您可以将 scan.next() 替换为 scan.nextLine(),然后检查该行中的第一个单词是否是您要查找的单词.对于包含大量行的文件,这可能会更快。

希望对您有所帮助。

Link to the Scanner API for reference.

关于Java - 读取文本文件的第一个字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23345160/

相关文章:

java - 基于时间的循环在android上的一个很好的实现

java - java有那么安全吗?

java - 抛出 NullPointerException,但对象已创建并正确返回值

java - 扫描仪类和线程 "main"java.util.InputMismatchException 错误中的异常

java - 继续从 catch block 中的扫描仪获取信息

java - MySQL - docker 容器和 MySQL 之间突然出现 "Communications link failure"

java - 如何使用一个可观察值的状态来跳过另一个可观察值的值?

java - Java序列化是缩小内存占用的工具吗?

java - 如何在数组中存储多个值(具有不同类型)并将其打印出来?

Java Scanner 类给出 java.util.NoSuchElementException