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

如何删除字符串中所有指定子串(含重叠匹配情况)

问题:删除字符串中所有重叠的模式子串

比如源字符串为"appleappleapplebanana",要删除的模式串是"appleapple"。要求删掉所有重叠的该子串,最终只保留"banana"。

appleappleapplebanana
^^^^^^^^^^              <-first  occurrence
     ^^^^^^^^^^         <-second occurrence     

用replaceAll方法得到的结果是"applebanana",因为它会先删除第一个匹配的子串,剩余的"applebanana"里无法再匹配到第二个重叠的模式串,不符合需求。

预期结果

输入模式结果
"appleapplebanana""appleapple""banana"
"appleapplebanana""appleapple""banana"
"appleappleapplebanana""appleapple""banana"
"applebanana""appleapple""applebanana"
"aaabbbaaabbbaaa""aaabbbaaa"""(空字符串)

由于需要处理任意输入的模式,仅靠replace("apple")这类针对性替换完全无法满足需求。

我自己梳理的实现思路:

  • 找出所有模式串的匹配位置(比如用KMP算法)
  • 将这些位置对应的字符标记为“待删除”
  • 最终删除所有标记的字符

原本想找现成的更优方案,但发现没有通用类库支持该功能,最后还是基于上述思路自行实现了相关函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:22:19