java在解析文本文件输入时不会移动到下一行
我在寻求一点帮助。我用谷歌搜索了很多次,但几乎没有成功
我是编程新手,我确信这是我一个愚蠢的疏忽
下面的代码旨在通读。以制表符分隔的txt文档。这个txt文件被格式化为六列。目前,当我在文件中移动时,我将字符串解析为适当的值类型,并将其分配给相应的变量。代码如下:
try {
s = new Scanner(new BufferedReader(new FileReader(file))).useDelimiter("\t");
while (s.hasNextLine()) {
group = Integer.parseInt(s.next());
death = Integer.parseInt(s.next());
name = s.next();
sex = s.next();
age = Integer.parseInt(s.next());
fare = Double.parseDouble(s.next());
System.out.println("Class = " + group); // Test that value is being assigned
System.out.println("Death = " + death); // Test that value is being assigned
System.out.println("Name = " + name); // Test that value is being assigned
System.out.println("Gender = " + sex); // Test that value is being assigned
System.out.println("Age = " + age); // Test that value is being assigned
System.out.println("Fare = " + fare); // Test that value is being assigned
}
} finally {
if (s != null) {
s.close();
}
}
当我到达第一行的最后一列时,可变票价设置为第1行第6列和第2行第1列。由于某些原因,换行符不会触发while循环重新启动
有人能帮我理解为什么while循环不能在线路的末尾重新启动吗
文件如下所示:
1 5 Bryan male 25 211.3375
1 2 Jimmy male 22 151.5500
大约有1200行。当运行这个循环时,在第一行末尾尝试设置fare=211.3375时,我得到以下错误。由于某些原因,换行符不会重置循环。我只能假设换行符没有被解释为制表符,但不知道如何更正
Exception in thread "main" java.lang.NumberFormatException: For input string: "211.3375
1"
# 1 楼答案
你正在检查
Scanner#hasNextLine()
,但随后阅读了多个Scanner#next()
,这是一件危险的事情。我建议如果你检查下一行,你应该阅读下一行,然后分析这一行例如
但即使这样也有点危险,因为我没有先检查就给
Scanner#next...()
打电话了。所以也许更安全的做法是这样做然后计算令牌的长度以确保其正确,然后将每个需要解析为数字类型的令牌解析为数字类型
或者你可以这样做:
或者使用try/catch块检查坏文件