扫描仪不会将文本文件分成令牌

时间:2017-04-30 04:16:37

标签: java arraylist text io

非常感谢任何帮助。我试图让扫描仪读取文本文件,然后将其输入到arraylist中。这是我的演示程序:

import java.util.*;
import java.io.*;

public class EmployeeDemo
{
   public static void main(String[] args) throws IOException
   {
      ArrayList<Employee> employees = new ArrayList<>();

      File emps = new File("Employees.txt");
      Scanner inputFile = new Scanner(emps); 

     for(int i = 0; i < 6; i++)
     {
         String id = inputFile.next();
         String name = inputFile.next();
         String department = inputFile.next();
         String position = inputFile.next();
         String salary = inputFile.next();
         String yrsofser = inputFile.next(); 

         employees.add(new Employee(id, name, department, position, salary, yrsofser));
      }

      inputFile.close();
      System.out.println(employees);
   }
}

对于文本文件,我现在只使用它:

101000
John Smith
EMS
EMT
21778.00
5

这是我得到的错误:

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1371)
    at EmployeeDemo.main(EmployeeDemo.java:16)

我尝试在id之后打印它,它给了我身份证号码,然后打印多年的服务。 我也在id之后尝试了inputFile.hasNext()并得到了错误。

有没有人知道为什么会发生这种情况?

2 个答案:

答案 0 :(得分:1)

根据您的代码,字符串标记化发生在每个空格之后。因此,它会认为您的文件中有7个令牌(而不是6个),因为“John”和“Smith”被视为两个单独的令牌。因此,最后一个标记再次被视为第二个雇员的“id”的下一个值,其余变量将没有任何值。因此,它会抛出“NoSuchElementException”,因为要添加的文本文件中没有更多值。

答案 1 :(得分:0)

首要问题:输入文件似乎只包含6行,7行。

但由于你的for循环,你的代码需要6 x 6行!

除此之外:例如,当您知道某行包含整数时,您可以使用nextInt()而不是读取扁平字符串。