Считайте количество раз, строка появляется в строке [дубликат]

Этот вопрос уже имеет ответ здесь:

У меня просто есть строка, которая выглядит примерно так:

"7, верный, NA, false:67, ложь, NA, false:5, ложь, NA, false:5, ложь, NA, ложь"

Все, что я хочу сделать, должно рассчитать, сколько раз "верная" строка появляется в той строке. Я чувствую, что ответ - что-то как String.CountAllTheTimesThisStringAppearsInThatString() но по некоторым причинам я просто не могу понять это.Помощь?

55
задан Milad Rashidi 17 December 2017 в 19:55
поделиться

7 ответов

Regex.Matches(input, "true").Count
175
ответ дан 26 November 2019 в 17:36
поделиться

Возможно, не самый эффективный, но думаю, что это изящный способ сделать это.

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;
    }
}
14
ответ дан 26 November 2019 в 17:36
поделиться

Это не удастся, если строка может содержать такие строки, как "miscontrue".

   Regex.Matches("7,true,NA,false:67,false,NA,false:5,false,NA,false:5,false,NA,false", "true").Count;
5
ответ дан 26 November 2019 в 17:36
поделиться

Ваше регулярное выражение должно быть \btrue\b, чтобы обойти проблему 'miscontrue', о которой говорит Каспер. Полное решение будет выглядеть следующим образом:

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 включено в верхнюю часть файла.

13
ответ дан 26 November 2019 в 17:36
поделиться

сделайте это, пожалуйста, обратите внимание, что вам придется определить regex для 'test'!!!

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
2
ответ дан 26 November 2019 в 17:36
поделиться

Здесь я переархитектурирую ответ, используя 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();
}
3
ответ дан 26 November 2019 в 17:36
поделиться

С 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" );
3
ответ дан 26 November 2019 в 17:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: