计算字符串在字符串中出现的次数[重复]

Posted

技术标签:

【中文标题】计算字符串在字符串中出现的次数[重复]【英文标题】:Count the number of times a string appears within a string [duplicate] 【发布时间】:2011-03-02 06:51:10 【问题描述】:

我只是有一个看起来像这样的字符串:

"7,真,不适用,假:67,假,不适用,假:5,假,不适用,假:5,假,不适用,假"

我要做的就是计算字符串“true”在该字符串中出现的次数。我觉得答案类似于String.CountAllTheTimesThisStringAppearsInThatString(),但由于某种原因我无法弄清楚。帮忙?

【问题讨论】:

***.com/questions/541954/… @jball 我认为所有解决方案都可以计算 character 的出现次数 @AakashM,看看第二个链接。此外,这是为该问题提供更正确(即基于字符串,而不是基于字符)答案的绝佳机会。 参考dotnetperls.com/string-occurrence 我很高兴你不为微软工作并命名方法! 【参考方案1】:
Regex.Matches(input, "true").Count

【讨论】:

仅基于简洁 - 你赢了;) C# 字符串中没有匹配项。哎呀。正则表达式。没关系 为什么我们要转义 input 这不是正则表达式? @tpower,我也有同样的问题。我研究了Regex.Escape 并在 LINQPad 中运行测试以确认。我编辑了编辑以删除它。【参考方案2】:

可能不是最有效的,但认为这是一种巧妙的方式。

class Program

    static void Main(string[] args)
    
        Console.WriteLine(CountAllTheTimesThisStringAppearsInThatString("7,true,NA,false:67,false,NA,false:5,false,NA,false:5,false,NA,false", "true"));
        Console.WriteLine(CountAllTheTimesThisStringAppearsInThatString("7,true,NA,false:67,false,NA,false:5,false,NA,false:5,false,NA,false", "false"));

    

    static Int32 CountAllTheTimesThisStringAppearsInThatString(string orig, string find)
    
        var s2 = orig.Replace(find,"");
        return (orig.Length - s2.Length) / find.Length;
    

【讨论】:

哈哈 - 我应该将你的标记为正确,只是因为我使用了我建议的方法名称。 :)【参考方案3】:

您的正则表达式应该是 \btrue\b 以解决 Casper 提出的“误解”问题。完整的解决方案如下所示:

string searchText = "7,true,NA,false:67,false,NA,false:5,false,NA,false:5,false,NA,false";
string regexPattern = @"\btrue\b";
int numberOfTrues = Regex.Matches(searchText, regexPattern).Count;

确保 System.Text.RegularExpressions 命名空间包含在文件顶部。

【讨论】:

字符串变量不应称为 Regex - 它与 .NET Regex 类名本身发生冲突。【参考方案4】:

如果字符串可以包含“miscontrue”之类的字符串,这将失败。

   Regex.Matches("7,true,NA,false:67,false,NA,false:5,false,NA,false:5,false,NA,false", "true").Count;

【讨论】:

【参考方案5】:

在这里,我将使用 LINQ 对答案进行过度架构。只是表明煮鸡蛋的方法不止“n”种:

public int countTrue(string data)

    string[] splitdata = data.Split(',');

    var results = from p in splitdata
            where p.Contains("true")
            select p;

    return results.Count();

【讨论】:

感谢它的工作又好又聪明:)【参考方案6】:

使用 Linq...

string s = "7,true,NA,false:67,false,NA,false:5,false,NA,false:5,false,NA,false";
var count = s.Split(new[] ',', ':').Count(s => s == "true" );

【讨论】:

【参考方案7】:

这样做,请注意您必须为“测试”定义正则表达式!!!

string s = "7,true,NA,false:67,false,NA,false:5,false,NA,false:5,false,NA,false";
string[] parts = (new Regex("")).Split(s);
//just do a count on parts

【讨论】:

以上是关于计算字符串在字符串中出现的次数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

c# - 如何计算ReadOnlyCollection字段中字符串的出现次数[重复]

shell 计算字符重复出现的次数 abdaaccabca 求a重复出现的次数 请问除了sed 和 wc 的方法得到外 还有啥

计算字符串中子字符串的所有非重叠出现次数[重复]

用SQL写一个重复字符串一定次数的函数Repeat 。

计算无限字符串中字母的出现次数

JAVA经典题--计算一个字符串中每个字符出现的次数