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

时间:2010-03-13 21:30:57

标签: java arrays runtime-error java.util.scanner

我有一个文本文件,包括学生等级:

Kim $ 40 $ 45
Jack $ 35 $ 40

我正在尝试从文本文件中读取此数据,并使用Scanner Class将信息存储到数组列表中。任何人都可以指导我正确编写代码吗?

代码

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)

2 个答案:

答案 0 :(得分:2)

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

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

你的问题是:

  • 您错误地阅读整行以获取学生姓名
  • $是需要转义的正则表达式元字符
  • 您需要同时提供行分隔符和字段分隔符

答案 1 :(得分:0)

您的while循环已关闭。

nextLine()将获取该行剩下的所有内容并将光标前进到那里。 然后nextInt()将跳转分隔符,直到找到一个int。 结果将是跳过值 假设金和杰克在不同的路线上,你会得到:

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

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

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