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

Java中如何检查String数组重复值 加载CSV时校验重复ID并抛异常

实现方案

你需要一个Set集合存储已经读取过的questionID,利用Set自带的去重特性和contains()方法就能快速完成重复校验,具体修改如下:

核心逻辑说明

  • 在循环读取CSV行之前初始化一个HashSet<String>,用来存储已出现的题目ID,推荐用HashSet而非List做存储,因为HashSet的contains()查询时间复杂度为O(1),数据量较大时效率远高于List的O(n)遍历查询
  • 每次解析得到当前行的questionID后,先调用set.contains(questionID)判断是否已存在
    • 存在则直接抛出异常
    • 不存在则将当前ID存入Set,继续执行后续校验逻辑
  • 额外注意:你现有代码的校验顺序有问题,需要先校验split后的数组长度,再按下标取对应字段,否则会触发数组越界异常

修改后完整代码

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

// 类定义省略
public void loadTrueFalseQuestions() throws Exception {
    try {
        Scanner input = new Scanner(new FileInputStream(TRUE_FALSE_FILE));
        // 新增:存储已出现的questionID
        Set<String> existedQuestionIds = new HashSet<>();

        while (input.hasNextLine()) {
            String line = input.nextLine();
            String[] split = line.split(",");
            
            // 先校验字段数量,避免数组越界
            if (split.length != TRUE_FALSE_FIELDS) {
                throw new Exception("CSV字段数量不匹配");
            }
            
            // 校验通过再取对应字段值
            String questionID = split[0];
            // 重复校验逻辑
            if (existedQuestionIds.contains(questionID)) {
                throw new Exception("发现重复的题目ID:" + questionID);
            }
            // 校验通过存入集合
            existedQuestionIds.add(questionID);
            
            int chapterNumber = Integer.parseInt(split[1]);
            String correctAnswer = split[3];
            
            // 答案合法性校验,用equals比matches更高效,逻辑与改用短路&&
            if (!correctAnswer.equals("TRUE") && !correctAnswer.equals("FALSE")) {
                throw new Exception("题目ID" + questionID + "的答案值不合法:" + correctAnswer);
            }
            
            // 后续业务逻辑省略
        }
        input.close(); // 不要忘记关闭IO资源
    } catch (FileNotFoundException e) {
        System.out.println("Could not open a file.");
        System.exit(0);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 08:18:03