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

Java中如何优化含g/d单词处理逻辑?解决空if语句问题

问题分析与解决方案

原代码核心问题

  1. 仅处理了列表第一个元素k1,其余k2-k5未执行任何逻辑,不符合“处理单词列表”的需求
  2. 遍历单词每个字符时,每遇到一个g就执行一次add、遇到d就执行一次remove,导致重复操作(比如单词"ggg"会被重复添加多次)
  3. 第三个空if完全多余,原逻辑方向错误——应该先判断整个单词是否同时包含g和d,而非逐个字符判断后做无意义分支

正确实现思路

根据需求,每个单词只需做一次判断:

  • 若单词同时包含'g'和'd':忽略
  • 若仅包含'g':复制该单词(添加到列表)
  • 若仅包含'd':删除该单词
  • 都不包含:无操作

同时,直接遍历原列表并修改会触发ConcurrentModificationException,需通过复制列表来规避。

优化后的代码

private static void fix(List<String> hg) {
    // 复制原列表,避免遍历原列表时修改引发异常
    List<String> tempList = new ArrayList<>(hg);
    for (String word : tempList) {
        boolean hasG = word.contains("g");
        boolean hasD = word.contains("d");
        
        if (hasG && hasD) {
            // 同时含g和d,忽略
            continue;
        }
        if (hasG) {
            // 仅含g,复制单词
            hg.add(word);
        } else if (hasD) {
            // 仅含d,删除单词
            hg.remove(word);
        }
    }
}

原代码中“空if”的处理

原代码里的第三个if (r.equals('g') || r.equals('d'))是错误逻辑下的产物,在重构后的代码中直接删除即可——因为我们不需要逐个字符判断后做分支,而是先对整个单词做一次性判断,既避免了重复操作,也消除了无意义的空分支。

补充:保留字符遍历的实现方式

如果必须保留逐个字符遍历的逻辑(比如有其他未说明的需求),可以改为遍历字符时标记是否存在g和d,遍历完单词后统一执行操作,避免重复触发增删:

private static void fix(List<String> hg) {
    List<String> tempList = new ArrayList<>(hg);
    for (String word : tempList) {
        boolean hasG = false;
        boolean hasD = false;
        // 遍历单词字符,标记是否存在g和d
        for (char c : word.toCharArray()) {
            if (c == 'g') {
                hasG = true;
            } else if (c == 'd') {
                hasD = true;
            }
            // 提前终止遍历:一旦同时找到g和d,无需继续
            if (hasG && hasD) {
                break;
            }
        }
        // 根据标记执行操作
        if (hasG && hasD) {
            continue;
        }
        if (hasG) {
            hg.add(word);
        } else if (hasD) {
            hg.remove(word);
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:50:09