Java: 使用Scanner类读取文本文件并将信息存储在数组中

3

我有一个文本文件,其中包含学生成绩,如下:

Kim $ 40 $ 45
Jack $ 35 $ 40

我希望您能够使用Scanner类从文本文件中读取数据,并将信息存储到ArrayList中。请问有没有人能够指导我正确编写代码?

代码

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

public class ReadStudentsGrade {

public static void main(String[] args) throws IOException {

    ArrayList stuRec = new ArrayList();
    File file = new File("c:\\StudentGrade.txt");
    try {
        Scanner scanner = new Scanner(file).useDelimiter("$");

        while (scanner.hasNextLine())
        {
            String stuName = scanner.nextLine();
            int midTirmGrade = scanner.nextInt();
            int finalGrade = scanner.nextInt();
            System.out.println(stuName + " " + midTirmGrade + " " + finalGrade);
        }
    }
    catch (FileNotFoundException e)
    {
        e.printStackTrace();
    }
}

运行时错误:
Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:840)
    at java.util.Scanner.next(Scanner.java:1461)
    at java.util.Scanner.nextInt(Scanner.java:2091)
    at java.util.Scanner.nextInt(Scanner.java:2050)
    at writereadstudentsgrade.ReadStudentsGrade.main(ReadStudentsGrade.java:26)

你遇到了什么问题?你为什么无法解决这个问题? - brabster
@Amateur:尝试一下我的答案,应该可以。 - polygenelubricants
2个回答

2

Try useDelimiter(" \\$ |[\\r\\n]+");

        String stuName = scanner.next(); // not nextLine()!
        int midTirmGrade = scanner.nextInt();
        int finalGrade = scanner.nextInt();

你遇到的问题是:

  • 你错误地读取了整行来获取学生姓名
  • $ 是一个需要转义的正则表达式元字符
  • 你需要提供行分隔符和字段分隔符

分隔符也是至关重要的。 - polygenelubricants

0

你的while循环有问题。

nextLine()会获取该行剩余部分并将光标移动到那里。 nextInt()然后会跳过分隔符,直到找到一个整数。 结果将是跳过值。
假设Kim和Jack在不同的行上,你会得到:

stuName == "Kim $ 40 $ 45"
midTirmGrade == 35
finalGrade == 40

作为你的输出;这不是你想要的。

要么你需要使用换行符作为分隔符,要么使用 StringTokenizer来拆分每一行,然后将每个部分解析为单独的标记。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接