C# 对字符串中的文本计数

C# 对字符串中的文本计数,c#,C#,我在.NET中有一个字符串,如下所示: string str = "Lorem ipsum is great. lorem ipsum Lorem..."; 我需要清点所有和案件相符的“知识”。所以Lorem应该出现两次,忽略Lorem 谢谢。可以使用Linq: string str = "Lorem ipsum is great. lorem ipsum Lorem..."; int loremCount = str.Split(new[]{' ','.',','}, StringSplit

我在.NET中有一个字符串,如下所示:

string str = "Lorem ipsum is great. lorem ipsum Lorem...";
我需要清点所有和案件相符的“知识”。所以Lorem应该出现两次,忽略Lorem


谢谢。

可以使用
Linq

string str = "Lorem ipsum is great. lorem ipsum Lorem...";
int loremCount = str.Split(new[]{' ','.',','}, StringSplitOptions.None).Count(s => s.Equals("Lorem"));

如果你想考虑“Loremo”:

您可以使用Linq

String searchWhat = "Lorem";
int count = str.Split(new[]{' ','.'}, StringSplitOptions.None)
               .Count(w => w == searchWhat);
演示:

编辑:您评论说“Lorem-Loremo”将计为两个,因此您希望计算给定单词(区分大小写)的所有出现次数,即使该单词是另一个单词的一部分。然后可以使用
String.Contains

int count = str.Split(new[]{' ','.'}, StringSplitOptions.None)
               .Count(w => w.Contains(searchWhat));

演示:这是我的2美分。它将发现所有“Lorem”案例都是敏感的,但它将返回包含“Lorem”的内容的计数,例如“Loremo”或“ThismightnotLoremebeyouwant”

这个问题有点模糊,所以这个答案是一个符合您要求的快速解决方案

string test = "Lorem ipsum is great. lorem ipsum Lorem...";

int pos = -1;
int count = 0;
while ((pos = test.IndexOf("Lorem", pos+1)) != -1)
    count++;

如果希望它能够执行其他操作,可以将整个字符串转储到一个列表中,然后从该列表中运行Linq查询

var phrase = "Lorem ipsum...";
var wordList = phrase.Split(' ').ToList();
var loremCount = wordList.Where(x => x.ToLower() == "lorem").Count();
通过这种方式,wordList是可重用的。

使用以下代码:

using System.Text.RegularExpressions;

string text = "Lorem ipsum is great. lorem ipsum Lorem...";
int count = new Regex("Lorem").Matches(text).Count;

希望它能帮助你。如果没有,请告诉我。

如果你考虑到这个案例,你的文本中只有一个“Lorem”。用“Loremo”代替“Lorem”怎么样?它算数吗?不仅仅是Lorem和Loremo算数,而是“Lorem”或“Lorem”和“Loremo”?也许这个问题可以与这个问题合并:如果'str=“Lorem ipsum Lorem.Lorem l”?你会得到2个,不是3个。我承认,这不再是真的了。其他标点符号呢?问题评论还表明,洛雷莫必须匹配(尽管评论有点模棱两可)。@NikoDrašković:编辑答案以考虑到这一点。我仍然认为它不完整:。还有,我很抱歉吹毛求疵。糟糕的是,OP没有在这里澄清他到底想要什么。@NikoDrašković:当然你可以在单词之间添加一个
Char[]
。如果OP不想计算单词,而是计算出现次数(甚至在一个单词中有多个“Lorem”,如“Loremolem”),那么接受的答案会更好。但这是一种不同的方法和要求。
var phrase = "Lorem ipsum...";
var wordList = phrase.Split(' ').ToList();
var loremCount = wordList.Where(x => x.ToLower() == "lorem").Count();
using System.Text.RegularExpressions;

string text = "Lorem ipsum is great. lorem ipsum Lorem...";
int count = new Regex("Lorem").Matches(text).Count;