从字符串中删除停止字
本文关键字:删除 字符串 | 更新日期: 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.Empty
。String.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);