Java - 读取文本文件的第一个单词

3

我在阅读文本文件时遇到了问题。如果第一个单词等于“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

如果有人能帮我解决这个问题,我会非常感激的。

如果@CyberneticTwerkGuruOrc没有这样做,那么它将是编译时错误,而不是运行时错误。第151行是String shape = scan.next();吗? - pennstatephil
请问您能否提供一个输入文件的样例吗? - Giovanni Botta
可能是Java.Util.Scanner中的NoSuchElementException的重复问题。 - pennstatephil
@pennstatephil 好观点。是时候去喝杯咖啡了。 - But I'm Not A Wrapper Class
2个回答

4
您可能会遇到此异常的原因是,即使该行上没有标记,scan.hasNextLine()也可以返回true。如果在标记后没有令牌时调用scan.next(),您将看到您正在看到的java.util.NoSuchElementException
因此,将scan.hasNextLine()替换为scan.hasNext()
或者,您可以将scan.next()替换为scan.nextLine(),然后检查该行中的第一个单词是否是您要查找的单词。这对于具有大量行的文件可能更快。
希望能帮到您。 链接到Scanner API供参考。

0
您可能需要按照以下方式修改代码:
 FileInputStream fileIn = new FileInputStream("shapeFile.txt");
 Scanner scan = new Scanner(fileIn);
 int[] var1 = new int[3];

 while(scan.hasNext()) {
     String shape = scan.next();
     if(shape.equals("Circle")) {
       for(int i = 0; i < 3;i++) {
          if(scan.hasNextInt()) {
            var1[i] = scan.nextInt();
          } else {
            break;
          }
       } 

       myShapes.addShape(new Circle(var1[0], var1[1], var1[2], Color.RED));
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接