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

移除字符串指定字符生成集合:代码输出不符合预期的排查求助

问题排查与修复:生成移除'C'后的目标字符串集合

核心问题

你的代码输出缺失CAA的根本原因是错误使用indexOf()获取要移除的字符位置:

  • 当遍历字符串中的每个'C'时,你用array.get(i).indexOf(a)去查找索引,但indexOf('C')只会返回字符串中第一个'C'的位置。
  • 比如处理原字符串CACA时,当遍历到第3个字符(索引2,是'C'),indexOf('C')仍然返回0,导致生成的是ACA而不是预期的CAA。重复的ACA后续被HashSet去重,最终结果就少了CAA。

另外,遍历集合时动态往里面加元素会导致循环次数不可控,但这不是本次结果缺失的主要原因。

修复后的代码

把获取移除索引的逻辑改成直接用当前遍历的j,同时简化字符串拼接的逻辑:

import java.util.ArrayList;
import java.util.HashSet;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> array = new ArrayList<>();
        array.add("CACA");
        char targetChar = 'C';

        // 先复制初始集合作为待处理列表,避免遍历过程中新增元素干扰循环
        ArrayList<String> toProcess = new ArrayList<>(array);
        for (String currentStr : toProcess) {
            for (int j = 0; j < currentStr.length(); j++) {
                if (currentStr.charAt(j) == targetChar) {
                    // 移除当前j位置的'C'
                    String newStr = currentStr.substring(0, j) + currentStr.substring(j + 1);
                    array.add(newStr);
                }
            }
        }

        // 去重(如果需要保持插入顺序,可改用LinkedHashSet)
        HashSet<String> uniqueSet = new HashSet<>(array);
        array.clear();
        array.addAll(uniqueSet);
        System.out.print(array);
    }
}

修复说明

  1. 用当前遍历索引j代替indexOf:确保每个'C'的位置都被正确处理,处理CACA时会生成ACA(移除索引0的'C')和CAA(移除索引2的'C')。
  2. 使用待处理列表隔离遍历过程:避免在遍历原集合时新增元素导致重复处理,确保每个初始和新生成的字符串都只被处理一次。
  3. 简化字符串拼接逻辑:不管'C'在什么位置,直接通过substring拼接移除后的字符串,代码更简洁。

运行修复后的代码,输出就是预期的[CACA, ACA, CAA, AA]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 07:35:11