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

Java读取|分隔符格式文本存入ArrayList的代码修改求助

代码修改逻辑

  • 读取到整行文本后,先清理行尾的;结束符,避免最后一条条目解析出现脏数据
  • 调用split("\\|")按|分割整行得到所有独立人员条目(|为正则特殊字符,需要双反斜杠转义)
  • 遍历每条人员条目,单独按逗号分割提取三个字段,封装为Persona对象存入列表
  • 原代码中showMenuOptions()放在读行循环内会重复触发,建议调整到所有数据解析完成后执行

修改后代码

public void readFile()
{
    String lineas;
    try
    {
        InputStream fileInputStream = new FileInputStream("datos.txt");
        InputStreamReader reader = new InputStreamReader(fileInputStream, Charset.forName("UTF-8"));
        
        BufferedReader br = new BufferedReader(reader);
        while((lineas = br.readLine()) != null)
        {
            // 清理行尾分号,按|分割所有人员条目
            lineas = lineas.trim().replaceAll(";$", "");
            String[] personEntries = lineas.split("\\|");
            
            // 遍历单条人员条目解析字段
            for (String entry : personEntries) {
                String[] valor = entry.split(",");
                String name = valor[0];
                int age = Integer.parseInt(valor[1]);
                int height = Integer.parseInt(valor[2]);
                persona.add(new Persona(name, age, height));
            }
        }
        // 所有数据加载完成后再展示菜单
        showMenuOptions();
        br.close();
    } catch (FileNotFoundException ex) {
        System.out.println("File Not Found.");
    } catch (IOException ex) {
        System.out.println("Can't open the File.");
    } catch (NumberFormatException ex) {
        System.out.println("数据格式错误,年龄或身高字段解析失败:" + ex.getMessage());
    }
}

可选优化:可以使用Java 7及以上支持的try-with-resources语法自动管理IO流,无需手动编写close逻辑,避免资源泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:18:03