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

如何对字符串数组进行大小写不敏感的单词出现次数统计(以首次词为键)

统计字符串数组中单词出现次数(忽略大小写,保留首次出现原词为键)

需求说明

  • 统计字符串数组中各单词的出现次数,统计时忽略大小写差异
  • 最终结果的键必须使用该单词在数组中首次出现的原始形式
  • 示例:
    • 输入:["AA", "Bb", "Aa", "aa", "BB"],输出:{AA=3, Bb=2}
    • 输入:["AAa","aaa","BBB","bbb","BbB","AaA","AAc"],输出:{AAa=3, BBB=3, AAc=1}

使用ConcurrentHashMap的实现代码

以下是基于ConcurrentHashMap的Java实现:

import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

public class WordCount {
    public static void main(String[] args) {
        ConcurrentHashMap<String, Integer> hm = new ConcurrentHashMap<>();
        String[] s1 = {"AA", "Bb", "Aa", "aa", "BB"};

        for (String s : s1) {
            if (hm.size() == 0) {
                hm.put(s, 1);
            } else {
                boolean foundMatch = false;
                Set<String> keySet = hm.keySet();
                for (String existingKey : keySet) {
                    if (existingKey.equalsIgnoreCase(s)) {
                        Integer count = hm.get(existingKey);
                        hm.put(existingKey, ++count);
                        foundMatch = true;
                        break;
                    }
                }
                // 仅当未找到匹配键时,才添加新条目
                if (!foundMatch) {
                    hm.put(s, 1);
                }
            }
        }

        System.out.println(hm);
    }
}

代码逻辑说明

  1. 初始化ConcurrentHashMap存储结果,键为单词首次出现的原始形式,值为对应出现次数
  2. 遍历输入数组的每个字符串:
    • 若Map为空,直接将当前字符串作为键存入,次数设为1
    • 若Map不为空,遍历已存在的键,用equalsIgnoreCase忽略大小写匹配:
      • 找到匹配键时,将对应次数加1并更新Map
      • 遍历完所有键都未匹配时,将当前字符串作为新键存入,次数设为1

修正说明

原代码存在逻辑冗余:遍历已有键时,每遇到不匹配的键就执行一次put操作,会导致同一新单词被重复存入多次。上面的代码通过foundMatch标记判断是否需要添加新条目,避免了不必要的Map操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:30:44