如何从CSV文件拆分商品名与数量并忽略店铺名存入HashMap列表?
实现方案:读取CSV并提取商品到HashMap
我来帮你搞定这个需求!咱们先梳理下现有代码的问题,然后给出完整的实现:
原代码的主要问题
break;的位置错误:当line == null时直接break,但后续代码(拆分、存入Map)会因为line为null抛出空指针异常,而且逻辑根本无法执行到循环体的有效代码块。- 未区分店铺行与商品行:没有判断行是否是店铺标识(以
>开头),会错误地处理店铺行。 - 缺少商品数据的解析与存入逻辑:拆分后没有将商品名和数量转换为对应类型并存入HashMap。
- 资源未正确关闭:未关闭
BufferedReader和FileReader,存在资源泄漏风险。
修正后的完整代码
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.HashMap; public class ListRead { // 用HashMap存储商品名(key)和数量(value) private HashMap<String, Integer> csvList = new HashMap<>(); public void loadManifest() throws IOException { // 使用try-with-resources自动关闭流,避免资源泄漏 try (FileReader listCSV = new FileReader("list.csv"); BufferedReader reader = new BufferedReader(listCSV)) { String line; // 逐行读取,直到line为null(文件末尾) while ((line = reader.readLine()) != null) { // 跳过店铺行(以">"开头的行) if (line.startsWith(">")) { continue; } // 拆分每行数据,按逗号分隔 String[] listElement = line.split(","); // 确保拆分后有两个元素(商品名和数量) if (listElement.length == 2) { // 去除元素前后的空格,避免干扰 String itemName = listElement[0].trim(); try { // 将数量字符串转为Integer类型 Integer quantity = Integer.parseInt(listElement[1].trim()); // 存入HashMap csvList.put(itemName, quantity); } catch (NumberFormatException e) { // 处理数量格式错误的情况,比如非数字的内容 System.err.println("无效的数量格式:" + line); e.printStackTrace(); } } else { // 处理格式不正确的行 System.err.println("格式错误的行:" + line); } } } // 可选:打印结果验证 System.out.println("提取的商品列表:" + csvList); } // 提供获取HashMap的方法,方便外部访问数据 public HashMap<String, Integer> getCsvList() { return csvList; } public static void main(String[] args) { ListRead reader = new ListRead(); try { reader.loadManifest(); } catch (IOException e) { e.printStackTrace(); } } }
关键逻辑说明
- 自动关闭资源:使用
try-with-resources语法,在代码块结束后自动关闭FileReader和BufferedReader,无需手动调用close(),避免资源泄漏。 - 忽略店铺行:通过
line.startsWith(">")判断当前行是否为店铺标识,若是则跳过该行。 - 数据清洗与转换:拆分后用
trim()去除每个元素前后的空格,避免CSV中可能存在的空格干扰;将数量字符串转为Integer类型,存入HashMap。 - 异常处理:添加
NumberFormatException捕获,处理数量不是有效数字的情况;同时处理拆分后元素数量不符合预期的行,增强代码健壮性。
内容的提问来源于stack exchange,提问作者csse
相关产品推荐
相关产品推荐

