我有一个这样的列表:
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
中出现的顺序删除单词,没有递归),您可以输入(让我们使用Linq,因为您已经尝试过Select
):
input = _unWantedWords.Aggregate(input, (s, w) => s.Replace(w, ""));
我们不能改变string
本身,但我们可以改变引用(即赋值给input
)
您可以使用ForEach
代替
_unWantedWords.ForEach(x => { input= input.Replace(x, "")});
您可以使用ForEach函数替换输入中的文本。
string output = input;
_unWantedWords.ForEach(x => output = output.Replace(x, ""));
为了不丢失原始输入,您可以创建另一个变量。
这就是你需要的吗?
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], "");
}
DotNet Fiddle: https://dotnetfiddle.net/zoY4t7
或你可以直接使用ForEach
,在这里阅读更多
_unWantedWords.ForEach(x => {
input = input.Replace(x, "");
});