繁体   English   中英

用列表中的每个字符串替换一个字符串

[英]Replace a string with each string in a list

我有一个这样的清单:

List<string> _unWantedWords = new List<string> { "word1", "word2", "word3" };

我有一个像这样的字符串:

string input = "word1mdjw ksjcword2 d word3fjwu";

我想删除输入字符串中不需要的单词,但字符串在 C# 中是不可变的,所以我虽然我会用 lambda 表达式一次性做一些花哨的事情。 像这样:

string output = _unWantedWords.Select(x => input.Replace(x, ""));

但我似乎无法让它工作,有什么想法吗? :)

丹尼尔

一般情况下,任务存在一些微妙的问题:

我们应该递归地做吗?

 "woword1rd1ABC" -> "word1ABC" -> ABC
    |   |            |   |
    remove        remove again

删除的顺序是什么:如果我们想删除{"ab", "bac"}那么"XabacY"的期望结果是什么?

 "XabacY" -> "XacY" // ab removed
          -> "XaY"  // bac removed

在最简单的情况下(删除单词以使其出现在_unWantedWords ,没有recursion )您可以放置​​(因为您已经尝试过Select所以让我们使用Linq ):

 input = _unWantedWords.Aggregate(input, (s, w) => s.Replace(w, ""));        

我们不能改变string本身,但我们可以改变引用(即分配到input

这是你需要的吗?

List < string > _unWantedWords = new List < string > {
  "word1",
  "word2",
  "word3"
};
string input = "word1mdjw ksjcword2 d word3fjwu";

for (int i = 0; i < _unWantedWords.Count; i++) {
  input = input.Replace(_unWantedWords[i], "");
}

点网小提琴: https : //dotnetfiddle.net/zoY4t7

或者你可以简单地使用ForEach在这里阅读更多

 _unWantedWords.ForEach(x => {
    input = input.Replace(x, "");
});

您可以使用ForEach代替

_unWantedWords.ForEach(x => { input= input.Replace(x, "")});

您可以使用 ForEach 函数来替换输入中的文本。

string output = input;
_unWantedWords.ForEach(x => output = output.Replace(x, ""));

您可以创建另一个变量,以免丢失原始输入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM