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

Java如何基于第二个字符串筛选第一个字符串的无重复独有字符

问题排查

你的代码存在以下几个核心错误:

  • 内层取str1字符的索引写错:str1.charAt(i)应该改为str1.charAt(j),你一直用外层循环的i变量取str1的字符,i只在0~3(str2长度是4)之间变化,所以只会重复取str1前4个字符,导致输出全是重复的n、d、i。
  • 循环逻辑倒置:你外层遍历str2、内层遍历str1,相当于每对比一个str2的字符,就把整段str1的字符加一遍到结果里,重复次数直接和str2长度挂钩,完全不符合筛选逻辑。
  • 没有去重逻辑:即使索引改对,也会把str1里重复出现的符合条件的字符多次加入结果,达不到要求的无重复输出。
  • 判断逻辑写反:你现在的逻辑是只要和当前str2的字符不等就加,哪怕这个字符在str2的其他位置存在也会被加,完全没实现「筛选str2不含有的字符」的需求。

修复后可运行代码

import java.util.HashSet;
import java.util.Set;

public class FilterCharTest {
    public static void main (String [] arg) {
        String str1 = "India is a great country";
        String str2 = "Isgt";
        StringBuilder result = new StringBuilder();
        // 先把str2转成全小写字符集合,方便快速判断是否存在,且不区分大小写
        Set<Character> str2CharSet = new HashSet<>();
        for (char c : str2.toCharArray()) {
            str2CharSet.add(Character.toLowerCase(c));
        }
        // 存储已经加入结果的字符,用于去重
        Set<Character> addedChar = new HashSet<>();
        for (char c : str1.toCharArray()) {
            // 跳过空格
            if (c == ' ') {
                continue;
            }
            char lowerC = Character.toLowerCase(c);
            // 只有str2不含该字符、且还没加入过结果的才添加
            if (!str2CharSet.contains(lowerC) && !addedChar.contains(lowerC)) {
                result.append(c);
                addedChar.add(lowerC);
            }
        }
        System.out.println("输出结果: " + result);
    }
}

运行后输出:输出结果: ndarecouy,完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:18:02