【问题标题】:Count Text in a String计算字符串中的文本
【发布时间】:2012-10-12 18:10:44
【问题描述】:

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

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

我还需要计算所有匹配大小写的“Lorem”。所以 Lorem 应该出现两次并忽略 lorem。

谢谢。

【问题讨论】:

  • 如果您考虑到这种情况,在您的文本中只有一个“Lorem”。
  • 用“Loremo”代替“Lorem”怎么样,算吗?
  • 不仅仅是 Lorem 和 Loremo 也很重要
  • 只是“Lorem”还是“Lorem”和“Loremo”?
  • 也许这个问题可以和这个合并:stackoverflow.com/questions/3016522/…

标签: c#


【解决方案1】:
string str = "Lorem ipsum is great. lorem ipsum Lorem...";
string word = "Lorem";
Console.WriteLine(Regex.Matches(str,word).Count);

【讨论】:

    【解决方案2】:

    你可以使用 Linq。

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

    演示:http://ideone.com/a9XHln

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

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

    演示:http://ideone.com/fxDGuf

    【讨论】:

    • 如果'str = "Lorem ipsum Lorem.Lorem l"怎么办?你会得到 2 个,而不是 3 个。
    • 我承认,这不再是真的了。其他标点呢?问题 cmets 还表明 Loremo 必须匹配(尽管评论有点模棱两可)。
    • @NikoDrašković:编辑了答案以考虑到这一点。
    • 我仍然认为它不完整:ideone.com/EXpBRr。另外,很抱歉吹毛求疵。太糟糕了 OP 没有在这里澄清他真正想要的东西。
    • @NikoDrašković:当然,您可以添加一个Char[],并在单词之间添加所有允许的分隔符。如果 OP 不想计算单词而是计算出现次数(甚至像“LoremoLorem”这样的单个单词中有多个“Lorem”),那么接受的答案会更好。但这是一种不同的方法和要求。
    【解决方案3】:

    这是我的 2 美分。它会发现“Lorem”的所有实例都区分大小写,但它会返回包含“Lorem”的事物的计数,例如“Loremo”或“thisismightnotLorembewhatyouwant”。

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

    string test = "Lorem ipsum is great. lorem ipsum Lorem...";
    
    int pos = -1;
    int count = 0;
    while ((pos = test.IndexOf("Lorem", pos+1)) != -1)
        count++;
    

    【讨论】:

      【解决方案4】:

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

      var phrase = "Lorem ipsum...";
      var wordList = phrase.Split(' ').ToList();
      var loremCount = wordList.Where(x => x.ToLower() == "lorem").Count();
      

      这种方式 wordList 是可重用的。

      【讨论】:

        【解决方案5】:

        可以使用Linq

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

        如果你想考虑“Loremo”:

        int loremCount = str.Count(s => s.Equals("Lorem"));
        

        【讨论】:

          【解决方案6】:

          使用下面的代码:

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

          希望对您有所帮助。如果没有,请告诉我。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-09-14
            • 2015-03-17
            • 1970-01-01
            • 2013-06-25
            • 1970-01-01
            • 2017-10-26
            相关资源
            最近更新 更多