我有一个文本文件,包括学生等级:
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)
答案 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来打破每一行,然后将每个部分解析为单独的标记。