java:读取文本文件并使用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) 

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

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

你的问题是:

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

你的while循环关闭了。

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

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

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

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