You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Scanner next()方法反向操作?读取文件创建Employee对象遇错求助

解决文件读取创建Employee对象的问题

需求与文件内容

需求:

  • 读取文件数据,使用四参构造器创建Employee对象并打印
  • 遇到行内容为Default时,使用无参构造器创建默认对象并打印

文件内容:

Baha Uysal,1008,Yönetim,CEO
Can Uysal,1511,IT,Web Developer
Estus Candy,4949,Muhasebe,Müşavir
Default 
İlis Kerhan,3535,Pazarlama,Negotiator

原代码问题分析

原代码存在以下关键问题:

  • 字符串比较使用!=,这是引用比较而非内容比较,无法正确判断是否为Default
  • nextLine()调用后Scanner指针已移动到下一行,后续next()会跳过当前行剩余内容,导致数据读取错位
  • 重复调用useDelimiter(),每次调用都会重置Scanner的分隔符逻辑,属于冗余操作

修正后的代码

public static void main(String[] args) throws FileNotFoundException {
    Scanner fileIn = new Scanner(new FileInputStream("C:\\Users\\Can\\Desktop\\girdiQuiz1.txt"));

    while (fileIn.hasNextLine()) {
        // 读取整行并去除首尾空白,避免换行符或空格干扰判断
        String currentLine = fileIn.nextLine().trim();
        
        if ("Default".equals(currentLine)) {
            // 创建默认Employee对象并打印
            Employee defaultWorker = new Employee();
            System.out.println(defaultWorker);
        } else {
            // 用单独的Scanner处理当前行的字段分割
            Scanner lineParser = new Scanner(currentLine).useDelimiter(",");
            String name = lineParser.next().trim();
            int id = lineParser.nextInt();
            String department = lineParser.next().trim();
            String position = lineParser.next().trim();
            
            Employee worker = new Employee(name, id, department, position);
            System.out.println(worker);
            
            lineParser.close();
        }
    }
    fileIn.close();
}

代码说明

  1. 整行读取判断:先读取完整一行内容,避免Scanner指针错位问题,同时用trim()处理行首尾的空白字符
  2. 正确字符串比较:使用"Default".equals(currentLine)进行内容比较,避免空指针风险
  3. 逐行字段解析:对非Default行,用独立的Scanner分割字段,逻辑清晰且不影响主Scanner的读取流程

关于反向next()的问题

Java的Scanner没有提供反向回退指针的方法,因为它基于输入流实现,输入流是单向只读的,无法回溯。解决这类问题的常规思路是提前将需要处理的内容读取到内存中(比如读取整行、读取所有内容到字符串),再进行解析,避免依赖输入流的指针移动。

内容的提问来源于stack exchange,提问作者Can

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:32:37