【问题标题】:Java, Scanner only reads the first two lines and ignores the restJava,Scanner 只读取前两行,忽略其余行
【发布时间】:2019-10-11 14:54:28
【问题描述】:

所以我创建了程序的一部分,它应该从文本文件中读取。问题是它只读取前两行(完美无瑕),当它第二次循环时tempLine 是“”。正因为如此,我得到了 ArrayIndexOutOfBoundsException。为什么会这样?

每个人有 2 行。这些被添加到列表中。

文件如下所示:

7603021234, Alhambra Aromes
2018-07-01
8104021234, Bear Belle
2018-12-02
8512021234, Chamade Coriola 
2017-03-12
7608021234, Diamanda Djedi
2019-01-30
7605021234, Elmer Ekorrsson
2010-04-07
7911061234, Fritjoff Flacon
1999-12-16
1111111111, Greger Ganache
2019-03-23
5711121234, Hilmer Heur
2019-08-18
2222222222, Ida Idylle
2017-03-07
1212121212, Jicky Juul
2018-09-27
4604151234, Kadine Karlsson
2018-01-09
9110261234, Liu Lingren
2018-02-15
7907281234, Mitsuko Mayotte
2018-12-22
7805211234, Nahema Ninsson
2019-01-04

这是我的源代码:

   public class ReadFile {

    private List<Customer> allMembers = new LinkedList<>();

    public void readFile () throws IOException {

        String tempLine;
        String[] tempString;
        String personalNumber;
        String firstName;
        String lastName;
        LocalDate lastPayed;

        Path inFilePath = Paths.get("C:\\Users\\Allan\\Documents\\Nackademin\\OOP\\Inlämningsuppgift2\\customers.txt");
        Scanner fileScanner = new Scanner(inFilePath);

        while(fileScanner.hasNext()) {
            tempLine = fileScanner.nextLine();
            tempString = tempLine.split(" ");
            personalNumber = tempString[0].replace(",", "");
            firstName = tempString[1];
            lastName = tempString[2];

            if (fileScanner.hasNext()) {
                lastPayed = LocalDate.parse(fileScanner.next());
                allMembers.add(new Customer(personalNumber, firstName, lastName, lastPayed));
            }

        }
    }

    public List<Customer> getAllMembers() {
        return allMembers;
    }
}

【问题讨论】:

  • 试试改成lastPayed = LocalDate.parse(fileScanner.nextLine());
  • 成功了!但是为什么???
  • 我相信 next() 将换行符留在扫描仪的输入缓冲区中,但 nextLine() 使用它。所以在第二次迭代中tempLine = fileScanner.nextLine(); 正在读取第二行末尾的换行符并返回一个空字符串。

标签: java while-loop text-files java.util.scanner


【解决方案1】:

请在 next() 上使用 nextLine()。

while(fileScanner.hasNextLine()) {
            tempLine = fileScanner.nextLine();
            tempString = tempLine.split(" ");
            personalNumber = tempString[0].replace(",", "");
            firstName = tempString[1];
            lastName = tempString[2];

            if (fileScanner.hasNextLine()) {
                lastPayed = LocalDate.parse(fileScanner.nextLine());
                allMembers.add(new Customer(personalNumber, firstName, lastName, lastPayed));
            }

        }

【讨论】:

    猜你喜欢
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 2010-10-31
    相关资源
    最近更新 更多