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

时间:2014-04-28 15:32:08

标签: 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

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

2 个答案:

答案 0 :(得分:4)

您可能遇到此异常的原因是因为scan.hasNextLine()可以返回true,即使该行上没有令牌也是如此。如果您在标记后没有令牌时拨打scan.next(),则会收到您所看到的java.util.NoSuchElementException

因此,为scan.hasNextLine()换出scan.hasNext()

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

我希望这会有所帮助。

Link to the Scanner API for reference.

答案 1 :(得分:1)

您可能需要按如下方式修改代码:

 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));
  }
}