我有一个带有关键字的列表。我编写了一个方法,如果字符串包含列表中的关键字,则该方法必须从字符串中删除关键字。方法如下:
private string RemoveFromList(string sentence)
{
var lists = new List<string>{ "ask-", "que-", "(app)", "(exe)", "(foo)" };
var control = lists.Any(sentence.Contains);
string result;
if (control)
{
var index = sentence.IndexOf(lists.FirstOrDefault(sentence.Contains)
?? throw new InvalidOperationException(), StringComparison.Ordinal);
result = index != -1 ? sentence.Remove(index) : sentence;
}
else
result = sentence;
return result;
}
var str = "ask- This is a sentence.";
Message.Box(RemoveFromList(str));
// It does not give to me: This is a sentence.
此方法无法正常工作。不会从字符串中删除关键字。
答案 0 :(得分:2)
使用string.Replace
是最简单的方法:
foreach (var word in lists)
{
sentence = sentence.Replace(word,"").Trim();
}
尽管那样也会在字符串的中间找到单词。如果只想在开始时删除它,则可以使用IndexOf
来检查它是否为0,然后使用word.Length
从Substring
开始使用字符串。或使用StartsWith
:
foreach (var word in lists)
{
if (sentence.StartsWith(word))
{
sentence = sentence.Substring(word.Length).Trim();
// break; // if only one
}
}
答案 1 :(得分:2)
有两种选择。
首先,“删除”用法不正确。您只想删除关键字。如果您传递1个参数来删除它,它将从该索引中删除直到结束。将关键字的长度作为第二个参数传递给Remove。
s.Remove(index,len);
如果字符串包含字符串,则用空字符串替换出现的关键字
s.Replace(“ keyword”,“”);
答案 2 :(得分:0)
另一种选择是您可以创建扩展,因为您已经知道要删除哪些项目。
using System.Text.RegularExpressions;
public static string RemoveFromList(this string sentence)
{
new List<string>{ "ask-",
"que-",
"(app)",
"(exe)",
"(foo)" }.ForEach(name =>
{
sentence = Regex.Replace(sentence.Replace(name, string.Empty), " {2,}", " ");
});
return sentence;
}
使用情况
var str = "ask- This is (app) a que- sentence.".RemoveFromList();
注意
我使用了Regex.Replace
,因为在删除错误的字符串后,您可能会在空白处留下一些空白,这有助于确保不会发生这种情况。