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
有人知道为什么会发生这种情况吗
# 1 楼答案
第一个也是最重要的问题:您的输入文件似乎只包含6行,也就是7行
但是由于您的for循环环境,您的代码需要6 x 6行
除此之外:例如,当您知道某一行包含整数时,您可以使用nextInt()而不是读取平面字符串
# 2 楼答案
根据您的代码,字符串标记出现在每个空格之后。因此,它会考虑在你的文件中有7个令牌(而不是6个),因为“约翰”和“史米斯”被认为是两个单独的令牌。因此,最后一个标记再次被视为第二个雇员“id”的下一个值,其余变量将没有任何值。因此,它抛出“NoTouchElementException”,因为文本文件中没有更多要添加的值