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来打破每一行,然后将每个部分解析为单独的标记。