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

Java读取双CSV匹配州名与缩写赋值给CityCrime对象问题

完整实现方案

1. 执行顺序调整

必须先加载州名缩写映射表,再读取犯罪数据:只需要调用1次readAbbrevData()拿到HashMap<String,String> stateToAbbreviation对象即可,不要放在读取犯罪数据的行循环里重复调用,避免不必要的性能损耗。

2. 核心匹配逻辑修改

你原来readCrimeData()方法中注释掉的crime.setState(stats[1])位置,替换为以下匹配逻辑即可,假设你读取crimeUSA.csv每行拆分后,stats[1]对应原始州名字段:

// 提前在循环外加载好映射表
HashMap<String, String> stateToAbbreviation = readAbbrevData();

// 逐行读取crimeUSA.csv的循环内逻辑
CityCrime crime = new CityCrime();
// 原有其他属性赋值逻辑保留,比如城市、人口等
crime.setCity(stats[2]);
crime.setPopulation(Integer.parseInt(stats[3]));

// 州名匹配赋值逻辑
String rawState = stats[1].trim(); // 去除原始值前后空格,避免格式问题导致匹配失败
String targetAbbrev = stateToAbbreviation.get(rawState);

// 容错处理:避免匹配不到时报空指针
if (targetAbbrev == null) {
    // 可以自定义兜底逻辑,比如打印异常信息方便排查
    System.out.println("未匹配到对应州缩写,原始州名:" + rawState);
    targetAbbrev = rawState; // 兜底直接使用原始州名,避免属性为空
}

// 给对象属性赋值
crime.setState(targetAbbrev); // 直接把缩写赋值给state属性,符合你的需求
// 如果需要单独存储完整州名和缩写两个字段,就额外调用setAbbreviation
// crime.setAbbreviation(targetAbbrev);

3. 常见问题优化(新手必看)

如果出现匹配失败的情况,90%是因为州名字符串格式不一致导致的,可以统一格式规避:

  • 加载映射表的时候,就把key统一转成全大写/全小写后再存,示例(修改你的readAbbrevData()方法):
    // 读取StatesAbbreviations.csv每行存映射时的逻辑
    String fullStateName = 读到的states字段值.trim().toUpperCase();
    String abbrev = 读到的abbrev字段值.trim();
    stateToAbbreviation.put(fullStateName, abbrev);
    
  • 匹配的时候也把原始州名转成同样的格式:
    String targetAbbrev = stateToAbbreviation.get(rawState.toUpperCase());
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 01:36:01