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

如何从字符串s1中移除所有出现在字符串s2中的字符?

解决从字符串s1中移除所有s2出现字符的问题

哦,我懂你的困扰了!你用replace(s2, "")没生效的核心原因是:Java的String.replace(CharSequence, CharSequence)方法是替换整个匹配的连续子串,而不是逐个移除s2里的每个独立字符。比如你的例子中,s2是"mur",它只会在s1里寻找连续的"mur"字符串,显然"Computer"里根本不存在这个子串,所以原字符串自然毫无变化。

下面给你几种实用的解决方案,按需选择:

方法1:手动遍历字符构建结果(基础易懂)

这种方法逻辑直观,适合新手理解:遍历s1的每个字符,只保留那些不在s2里的字符,用StringBuilder来高效拼接结果。

String s1 = "Computer";
String s2 = "mur";
StringBuilder result = new StringBuilder();

for (char c : s1.toCharArray()) {
    // 检查当前字符是否不在s2中
    if (s2.indexOf(c) == -1) {
        result.append(c);
    }
}

System.out.println(result.toString()); // 输出:Copte

方法2:正则表达式替换(简洁高效)

利用正则的字符类特性,把s2里的所有字符转成[xxx]格式,然后替换所有匹配的字符为空。注意要用Pattern.quote()处理s2,避免s2包含正则特殊字符(比如^、.、*)时出错。

import java.util.regex.Pattern;

String s1 = "Computer";
String s2 = "mur";
// 构建正则字符类,比如"[mur]"
String regex = "[" + Pattern.quote(s2) + "]";
String result = s1.replaceAll(regex, "");

System.out.println(result); // 输出:Copte

方法3:Java 8+ 流操作(简洁现代)

如果你的项目用Java 8及以上,流操作能写出更简洁的代码:

import java.util.stream.Collectors;

String s1 = "Computer";
String s2 = "mur";
String result = s1.chars()
                  .mapToObj(c -> String.valueOf((char) c))
                  .filter(c -> !s2.contains(c))
                  .collect(Collectors.joining());

System.out.println(result); // 输出:Copte

优化版:用HashSet提升性能(适合大字符串)

如果s1或s2的长度很大,上面方法里的indexOf或contains是O(n)时间复杂度,用HashSet存储s2的字符可以把查询降到O(1),提升效率:

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

String s1 = "Computer";
String s2 = "mur";
Set<Character> charsToRemove = new HashSet<>();
for (char c : s2.toCharArray()) {
    charsToRemove.add(c);
}

StringBuilder result = new StringBuilder();
for (char c : s1.toCharArray()) {
    if (!charsToRemove.contains(c)) {
        result.append(c);
    }
}

System.out.println(result.toString()); // 输出:Copte

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:39:38