从字符串中删除停止字

本文关键字:删除 字符串 | 更新日期: 2023-09-27 17:58:33

我正试图从字符串中删除停止字,但问题是如果它再次出现在字符串中,它会从单个单词中删除字符。
例如,原始字符串为:"这部电影不错。"结果字符串为:"这部电影不错。"。效果不错。但是
如果字符串是:"这部电影很好。"
则结果字符串将为:"th movie good。"
由于在此字符串中重复,因此它在结果中被豁免。
另一个字符串:"这场比赛太棒了。所以,我看了很多比赛。"
结果:"gme fntstic.所以,wtched plyed lot。"
由于a在该字符串中重复,因此结果字符串显示除a之外的所有单词。

我在唱这个代码:

List<string> stopWordsList = new List<string>();
stopWordsList = stopWordsFilter();//funtion returning the list of stop words taking from file.
        string propertyValue = "this game is fantastic. So, I watched and played a lot.";
        foreach (string word1 in propertyValue.Split(' '))
        {
            foreach ( var word in stopWordsList)
            {
                if (word.Equals(word1) && word.Length == word1.Length)
                {
                    propertyValue = propertyValue.Replace(word, "");
                }
            }
        }
        Console.WriteLine(propertyValue);

从字符串中删除停止字

问题是将停止字替换为String.EmptyString.Replace不关心单词,而关心子字符串。

你可以使用这种方法:

string propertyValue = "this game is fantastic. So, I watched and played a lot.";
var words = propertyValue.Split();
var newWords = words.Except(stopWordsFilter);
propertyValue = string.Join(" ", newWords);

如果你想忽略这种情况,也可以省略"Is":

var newWords = words.Except(stopWordsFilter, StringComparer.InvariantCultureIgnoreCase);

我在这里提出了一个使用linq:的解决方案

    string result = propertyValue.Split(' ')
        .Where(s => !stopWordsList.Contains(s))
        .Aggregate((current, next) => current + " " + next);
    Console.WriteLine(result);