C# 如何计算字符串中的噪声字数?
假设我有一个噪音词列表C# 如何计算字符串中的噪声字数?,c#,regex,linq,C#,Regex,Linq,假设我有一个噪音词列表 string[] noise = new[] {"and", "it", "in"}; // etc, etc …我有一个字符串s。我想知道s中存在多少噪声词 我知道可以通过在空格上拆分s,然后在结果数组中循环检查noise中的匹配项来实现这一点,但这似乎是一种非常低效的方法。感觉应该有一个整洁的正则表达式或Linq方法来实现这一点 有什么建议吗?LINQ并不比循环更有效,但通常更具可读性和简洁性,我想这正是您想要的。在这种情况下,您可以使用可枚举.计数和包含: int
string[] noise = new[] {"and", "it", "in"}; // etc, etc
…我有一个字符串s
。我想知道s
中存在多少噪声词
我知道可以通过在空格上拆分
s
,然后在结果数组中循环检查noise
中的匹配项来实现这一点,但这似乎是一种非常低效的方法。感觉应该有一个整洁的正则表达式或Linq方法来实现这一点
有什么建议吗?LINQ并不比循环更有效,但通常更具可读性和简洁性,我想这正是您想要的。在这种情况下,您可以使用
可枚举.计数
和包含
:
int countNoiseWords = s.Split().Count(noise.Contains);
不区分大小写的方式:
int countNoiseWords = s.Split()
.Count(w => noise.Contains(w, StringComparer.InvariantCultureIgnoreCase));
如果<代码>噪声-LIST非常长,您应该考虑使用<代码> HasStuts<代码>而不是列表。 这些单词总是用字符串分隔吗?标点符号呢?还有什么让你认为Linq或RegEx会更好?它必须是一个列表吗?如果单词是常量(即不是用户输入),您可以编写一个正则表达式,如
\b(?:and | it | in)\b
,并计算matches@DavidG是的,单词之间用空格隔开,没有任何标点符号(这是一个不寻常的情况,但不值得解释,因为它并没有真正影响问题),我并没有说Linq或RegEx一定会更好,我在寻找一种更优雅和/或更高效的编码方式,并建议将它们作为明显的候选者。Tim的答案正是我所需要的。“我知道可以通过在空格上拆分s,然后在结果数组中循环检查噪声中的匹配项来实现这一点”。@Evk:是的,但他想要一种LINQ方法,因为它更简洁。顺便提一下,值得使用哈希集,谁知道噪声列表有多长。@Evk在我的例子中,噪声列表非常短,因此不需要HashSet。我不是专门寻找Linq或RegEx,我只是想看看是否有一种更优雅和/或高效的编码方式。这很好用。@avrohmyisroel注意,如果有任何标点符号,这将给出错误的否定。例如“Test.It burns”-“It”将不被计算在内。