有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Scanner没有将文本文件分割成标记

任何帮助都将不胜感激。我试图让扫描仪读取文本文件,然后将其输入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之后hasNext()并获取false

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


共 (2) 个答案

  1. # 1 楼答案

    第一个也是最重要的问题:您的输入文件似乎只包含6行,也就是7行

    但是由于您的for循环环境,您的代码需要6 x 6行

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

  2. # 2 楼答案

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