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

Java读取字符串存入数组时如何忽略大小写实现去重

Java 实现字符串忽略大小写判重的解决方案

你当前的实现中使用ArrayList.contains()判断重复,底层依赖String.equals()方法区分大小写比较,因此无法识别大小写不同的同义单词,以下是两种可行的实现方案:

方案1:使用TreeSet实现(推荐)

借助JDK自带的String.CASE_INSENSITIVE_ORDER比较器初始化TreeSet,可自动完成忽略大小写的去重逻辑,且会保留首次录入单词的原始大小写,代码简洁效率更高:

Scanner fileScanner = new Scanner(file);
fileScanner.useDelimiter("[^A-Za-z0-9]");
// 指定大小写不敏感的比较规则
TreeSet<String> wordSet = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
while (fileScanner.hasNext()) {
    String nextWord = fileScanner.next();
    // 跳过分隔符切割产生的空字符串
    if (nextWord.isEmpty()) {
        continue;
    }
    wordSet.add(nextWord);
}
// 如有需要可直接转为ArrayList
ArrayList<String> words = new ArrayList<>(wordSet);

方案2:基于ArrayList手动遍历判断

如果你必须使用ArrayList存储,可以自行遍历已有元素,通过String.equalsIgnoreCase()做大小写不敏感的重复判断:

Scanner fileScanner = new Scanner(file);
fileScanner.useDelimiter("[^A-Za-z0-9]");
ArrayList<String> words = new ArrayList<String>();
while (fileScanner.hasNext()) {
    String nextWord = fileScanner.next();
    if (nextWord.isEmpty()) {
        continue;
    }
    boolean isDuplicate = false;
    for (String existed : words) {
        if (existed.equalsIgnoreCase(nextWord)) {
            isDuplicate = true;
            break;
        }
    }
    if (!isDuplicate) {
        words.add(nextWord);
    }
}
  • 注意:数据量较大时方案2的判断效率远低于方案1,优先选择TreeSet实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:54:01