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

Java如何实现按用户选择从CSV多行字符串中提取指定行存储逗号分隔值

CSV车辆选择功能代码补全方案

实现思路

你现有代码已经完成了CSV文件加载的基础逻辑,只需要补充三个核心模块即可满足需求:

  • 读取CSV行数据时,提取每行首列的车辆编号,将编号和对应车辆字段做键值映射存储,方便后续快速匹配
  • 增加控制台输入交互逻辑,做双层校验:既判断输入是否为合法整数,也判断整数是否落在1-5的有效区间,避免非法输入导致程序崩溃
  • 拿到合法的用户输入编号后,直接从映射存储中取出对应车辆数据留存即可

补全后完整代码

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class CarBooking {
    public static void carSelection() throws IOException{
        String CSVFileName = "CarList.csv";
        File file = new File(CSVFileName);
        // 存储车辆编号和对应车辆数据的映射
        Map<Integer, String[]> carDataMap = new HashMap<>();
        
        System.out.println("To make a booking:");
        System.out.println("     Select the car number from the car list");
        try {
            Scanner fileScanner = new Scanner(file);
            // 逐行读取CSV,存入映射表
            while (fileScanner.hasNextLine()) {
                String line = fileScanner.nextLine();
                // 跳过空行避免解析报错
                if (line.isBlank()) continue;
                // 按逗号拆分每行字段,trim处理字段前后多余空格
                String[] carInfo = line.split(",");
                for (int i = 0; i < carInfo.length; i++) {
                    carInfo[i] = carInfo[i].trim();
                }
                Integer carId = Integer.parseInt(carInfo[0]);
                carDataMap.put(carId, carInfo);
                // 读取时直接打印车辆列表,方便用户选择
                System.out.printf("编号%d:%s  %s座  %s  %s配置  日租价$%s%n",
                        carId, carInfo[1], carInfo[2], carInfo[3], carInfo[4], carInfo[5]);
            }
            fileScanner.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return;
        }

        // 交互获取用户合法输入
        Scanner inputScanner = new Scanner(System.in);
        int selectedCarId = -1;
        while (selectedCarId < 1 || selectedCarId > 5) {
            System.out.print("请输入1-5范围内的车辆编号完成选择:");
            // 判断输入是否为整数
            if (inputScanner.hasNextInt()) {
                selectedCarId = inputScanner.nextInt();
                if (selectedCarId <1 || selectedCarId >5) {
                    System.out.println("输入超出范围,请重新输入");
                }
            } else {
                System.out.println("输入无效,请输入整数类型的车辆编号");
                // 清空无效输入的缓冲区
                inputScanner.next();
            }
        }
        inputScanner.close();

        // 取出用户选中的车辆数据存储,后续可直接调用该变量做业务逻辑
        String[] selectedCar = carDataMap.get(selectedCarId);
        // 打印选中结果确认
        System.out.printf("已选中车辆:%s,日租价格$%s%n", selectedCar[1], selectedCar[5]);
    }
}

注意事项

  • 拆分CSV字段后统一做trim()处理,适配示例数据里Automatic 这类字段尾部带多余空格的情况,避免后续匹配配置类型时因为空格出错
  • 读取文件的Scanner和接收控制台输入的Scanner分开实例化,避免流冲突
  • 输入校验环节必须处理非整数输入的场景,否则用户输入字母、符号时程序会直接抛出异常终止

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 08:09:42