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

Java从TXT读取全名数据并存储为HashMap键值对的实现问题

问题修正与解决方案

代码中的问题点

  • 字符串拆分逻辑错误:当前代码里key和value都取了空格后的子串,导致键值都是 lastName,完全不符合「firstName 为 key,lastName 为 value」的需求。
  • 方法名拼写错误:map.KeySet()是错误写法,Java 中集合方法名以小写开头,正确应为map.keySet()。
  • 输出格式不清晰:直接拼接键值会导致内容连在一起,可读性差。
  • 未正确释放资源:读取文件后未关闭BufferedReader,可能造成资源泄漏。

修正后的代码

package javap;
import java.io.*;
import java.util.HashMap;

public class Datainput {

    public static void main(String[] args) throws IOException {

        File file = new File("E:\\Data.txt");
        // 若文件不存在则创建,存在则不做操作
        file.createNewFile();

        HashMap<String, String> nameMap = new HashMap<>();

        // 使用try-with-resources自动关闭流,避免资源泄漏
        try (BufferedReader br = new BufferedReader(new FileReader(file))) {
            String line;
            while ((line = br.readLine()) != null) {
                // 先去除首尾空白,再按空格拆分,最多拆成2部分(兼容lastName含空格的情况)
                String[] nameParts = line.trim().split(" ", 2);
                // 确保拆分后有有效姓名部分,避免空行或格式错误的行引发异常
                if (nameParts.length == 2) {
                    String firstName = nameParts[0];
                    String lastName = nameParts[1];
                    nameMap.put(firstName, lastName);
                }
            }
        }

        // 遍历输出键值对,格式更清晰
        for (String firstName : nameMap.keySet()) {
            System.out.println(firstName + ": " + nameMap.get(firstName));
        }
    }
}

关键修改说明

  1. 正确拆分全名:用trim()先清理字符串首尾空白,再通过split(" ", 2)按空格拆分,限制最多拆成2部分——既保证 firstName 是空格前的内容,又能兼容 lastName 包含空格的场景(比如「john van doe」会被拆成firstName=john,lastName=van doe)。
  2. 修复方法名:将map.KeySet()改为符合Java规范的nameMap.keySet()。
  3. 增加异常防护:判断拆分后的数组长度是否为2,避免文件中空行、格式错误的行引发数组越界异常。
  4. 自动管理流资源:使用try-with-resources语法,无需手动关闭BufferedReader,系统会自动释放资源。
  5. 优化输出格式:在键值之间添加: ,让输出内容更易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:28:12