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

