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

Java的wordIndexer方法无法正确统计ArrayList对象标题的单词出现次数

问题解决:统计单词在对象标题中出现次数仅显示一次的问题

问题场景

我现在在处理存储RedditThing对象的ArrayList,想用wordIndexer方法统计指定单词在这些对象标题里的出现次数。比如目标单词"we"实际在所有标题里一共出现了3次,但我的方法最后只输出了1次,这可愁死我了,相关代码片段如下:

public class RedditThingIndexer { 
    static List<String> words = new ArrayList<>(); 
    public static String wordIndexer(List<RedditThing> list, String word) { 
        int count = 0; 
        // 这里的for循环逻辑可能有问题
        for (...) {
            // 处理每个RedditThing的标题
        }
        // 输出或返回count
    }
}

大概率踩坑的原因

我猜你肯定是在遍历或匹配环节犯了下面这些常见错误之一:

  • 只处理了列表里的第一个对象:比如for循环提前break了,或者循环逻辑只走了一次就结束
  • 没处理大小写差异:标题里有"We"、"WE"这类变体,但你只匹配小写的"we",直接漏掉了其他大小写的情况
  • 循环内错误重置计数:比如把int count = 0;写在了for循环里面,每次循环都把计数清零,最后自然只统计到最后一个对象里的次数

靠谱的修复方案

咱们来写一个能正确统计的版本,把这些坑都填上:

public class RedditThingIndexer { 
    // 改成返回int更合理,毕竟是统计次数
    public static int wordIndexer(List<RedditThing> list, String targetWord) { 
        int totalCount = 0;
        // 统一转小写,避免大小写不匹配的问题
        String normalizedTarget = targetWord.toLowerCase();
        
        // 遍历整个列表,一个对象都不落下
        for (RedditThing thing : list) {
            String title = thing.getTitle();
            if (title == null || title.isEmpty()) {
                continue; // 跳过空标题,避免空指针
            }
            // 把标题转小写,用正则分割成独立单词(处理标点、空格)
            String[] titleWords = title.toLowerCase().split("\\W+");
            for (String word : titleWords) {
                if (normalizedTarget.equals(word)) {
                    totalCount++;
                }
            }
        }
        System.out.println("单词'" + targetWord + "'总共出现了" + totalCount + "次");
        return totalCount;
    }
}

// 假设你的RedditThing类有getTitle方法
class RedditThing {
    private String title;
    // 构造方法
    public RedditThing(String title) {
        this.title = title;
    }
    // 获取标题的方法
    public String getTitle() {
        return title;
    }
}

关键细节解释

  • 大小写归一化:把目标单词和标题都转成小写,确保不管标题里是"We"还是"WE"都能被匹配到
  • 完整遍历列表:用增强for循环遍历整个list,保证每个RedditThing的标题都被检查到
  • 正确分割单词:用\\W+正则分割,能把逗号、问号、空格这些都作为分隔符,避免把"we,"或者"we?"当成和"we"不同的单词
  • 空值防护:遇到标题为空或null的对象直接跳过,避免触发空指针异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:21:04