Java读取文件时如何跳过空行,解决读取空行时程序崩溃的问题
Java读取文件跳过空行的解决方法
崩溃原因
你程序崩溃的原因很明确:读取到空行时,行内没有任何有效内容,此时调用lineScan.next()读取姓名会直接抛出找不到元素的异常,导致程序终止。
修复方法
只需要在读取到每一行后,先做空行校验,确认是空行就直接跳过后续处理即可,具体操作如下:
- 读取单行后先调用
trim()方法去除行首尾的所有空白字符(空格、制表符、换行符等) - 校验处理后的字符串长度是否为0,为0则判定为空行,执行
continue直接进入下一轮循环读取下一行
修改后的完整代码
import java.io.*; import java.util.*; public class DATA { public static void main(String[] args) { Scanner input = null; try { input = new Scanner(new File("EmployeeData.txt")); } catch (Exception e) { System.out.println("文件读取失败:" + e.getMessage()); System.exit(-1); } while (input.hasNextLine()) { String line = input.nextLine(); // 新增空行判断逻辑 if (line.trim().isEmpty()) { continue; } Scanner lineScan = new Scanner(line); String name = lineScan.next(); double rate = lineScan.nextDouble(); int sum = 0; while (lineScan.hasNextInt()) { sum = sum + lineScan.nextInt(); } double salary = rate * sum; if (salary > 400) { double tax = salary * 0.67; System.out.print(name + " 总工时为: " + sum + " 小时,时薪为$" + rate); System.out.printf(" 时薪为 $ %.2f%n", rate); System.out.printf(" 总薪资为 $ %.2f%n", salary); System.out.println("\n扣除33%个税后的实发薪资为 " + tax); System.out.println(); } else { double tax = salary * 0.75; System.out.print(name + " 总工时为: " + sum); System.out.printf(" 小时,时薪为 $ %.2f", rate); System.out.printf(" 总薪资为 $ %.2f", salary); System.out.println("\n扣除25%个税后的实发薪资为 $" + tax); System.out.println(); } lineScan.close(); } input.close(); } }
额外注意事项
你提供的样例文件中,Betty对应的行末尾存在7.的内容,不属于合法的int格式,如果这不是输入笔误,你还需要额外添加格式校验逻辑处理这类非整数内容,避免再次触发运行异常。
内容的提问来源于stack exchange,提问作者Tien Ditol
相关产品推荐
相关产品推荐

