如何提取数组中用户指定索引的信息并存储,实现按车牌号查询车辆信息
实现方案指导
- 首先解决现有代码的核心问题:你当前的读取逻辑仅将每行CSV的字段拆分到临时变量,没有存储到可全局访问的结构中,读取完成后无法复用之前的行数据,自然没办法做后续的车牌号查找。你可以选择用数组或者集合存储所有车辆信息,
ArrayList相比普通数组不需要提前确定长度,更适合CSV行数不确定的场景。 - 读取CSV阶段不要加入用户交互逻辑,等所有数据全部加载到存储结构后,再提示用户输入车牌号执行查找。
- 查找逻辑可以根据场景选择:数据量小的时候直接遍历存储结构对比车牌号即可;数据量大的场景可以额外构建
HashMap<车牌号, 索引>的映射表,查找效率可以从O(n)优化到O(1)。 - 注意添加边界校验:比如空行跳过、字段数量不足的异常行跳过、车牌号匹配不到的提示,避免程序运行报错。
参考代码实现
import java.util.ArrayList; import java.util.Scanner; import java.io.File; import java.io.FileNotFoundException; public class CarInfoQuery { public static void main(String[] args) { ArrayList<String[]> carList = new ArrayList<>(); Scanner csvScanner = null; // 读取CSV数据存入集合 try { csvScanner = new Scanner(new File("你的CSV文件路径.csv")); while (csvScanner.hasNextLine()) { String line = csvScanner.nextLine().trim(); // 跳过空行 if (line.isEmpty()) continue; String[] fields = line.split(","); // 校验字段数量避免数组越界 if (fields.length >= 6) { carList.add(fields); } } } catch (FileNotFoundException e) { System.out.println("CSV文件未找到:" + e.getMessage()); return; } finally { if (csvScanner != null) csvScanner.close(); } // 提示用户输入车牌号 Scanner userScanner = new Scanner(System.in); System.out.print("请输入要查询的车牌号:"); String targetNo = userScanner.nextLine().trim(); userScanner.close(); // 遍历查找匹配车辆 int matchIndex = -1; String[] matchCar = null; for (int i = 0; i < carList.size(); i++) { if (carList.get(i)[0].equals(targetNo)) { matchIndex = i; matchCar = carList.get(i); break; } } // 输出查询结果 if (matchIndex != -1) { System.out.println("查询到对应车辆,索引位置:" + matchIndex); System.out.println("车牌号:" + matchCar[0]); System.out.println("车辆名称:" + matchCar[1]); System.out.println("座位数:" + matchCar[2]); System.out.println("变速箱类型:" + matchCar[3]); System.out.println("车型:" + matchCar[4]); System.out.println("日租价格:" + matchCar[5]); } else { System.out.println("未找到对应车牌号的车辆信息"); } } }
优化建议
如果你的CSV数据量较大,或者需要高频查询,可以构建哈希映射表优化查找速度,构建逻辑如下:
import java.util.HashMap; // 新增映射表存储车牌号和索引的对应关系 HashMap<String, Integer> carNoIndexMap = new HashMap<>(); // 读取CSV的循环中,存入carList后同步写入映射表 carList.add(fields); carNoIndexMap.put(fields[0], carList.size() - 1); // 查找时直接通过映射表取索引,无需遍历 Integer matchIndex = carNoIndexMap.get(targetNo); if (matchIndex != null) { String[] matchCar = carList.get(matchIndex); // 后续打印逻辑和上面一致 }
如果你的CSV字段内容中包含逗号(比如某个字段是带逗号的备注),不要用split(",")拆分,建议使用专门的CSV解析库处理,避免拆分错误。
内容的提问来源于stack exchange,提问作者elliotSmith
相关产品推荐
相关产品推荐

