You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用C# LINQ移除字符串中指定列表的所有子串?

最优LINQ查询实现方案

首先咱们明确核心需求:整词移除指定列表中的所有单词,同时保证最终字符串的空格格式干净(不会出现多余连续空格)。

实现代码

string originalString = "String must be replaced for all the occurrences found in the replace string";
HashSet<string> stringToRemoveSet = new HashSet<string> { "to", "be", "in", "the", "for", "all" };

string result = string.Join(" ", 
    originalString.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
                  .Where(word => !stringToRemoveSet.Contains(word)));

为什么这是最优解?

  • 用HashSet替代List存移除词HashSetContains方法是O(1)时间复杂度,比List的O(n)快得多,当移除列表规模变大时,性能优势会非常明显。
  • Split时移除空条目:避免原始字符串里可能存在的多个连续空格拆分出空字符串,确保过滤后的结果没有无效项,拼接出来的字符串不会有多余空格。
  • LINQ链式调用:代码简洁直观,符合C#函数式编程的风格,同时兼顾了性能和可读性。

验证结果

运行这段代码后,得到的结果完全符合你的预期:

String must replaced occurrences found replace string

注:这个方案是基于整词匹配的逻辑,如果你的需求是移除任意子串(非整词),那需要调整实现,但从你的示例来看,整词匹配完全贴合需求。

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

火山引擎 最新活动