Этот вопрос уже имеет ответ здесь:
У меня просто есть строка, которая выглядит примерно так:
"7, верный, NA, false:67, ложь, NA, false:5, ложь, NA, false:5, ложь, NA, ложь"
Все, что я хочу сделать, должно рассчитать, сколько раз "верная" строка появляется в той строке. Я чувствую, что ответ - что-то как String.CountAllTheTimesThisStringAppearsInThatString()
но по некоторым причинам я просто не могу понять это.Помощь?
Возможно, не самый эффективный, но думаю, что это изящный способ сделать это.
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;
}
}
Это не удастся, если строка может содержать такие строки, как "miscontrue".
Regex.Matches("7,true,NA,false:67,false,NA,false:5,false,NA,false:5,false,NA,false", "true").Count;
Ваше регулярное выражение должно быть \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 включено в верхнюю часть файла.
сделайте это, пожалуйста, обратите внимание, что вам придется определить 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
Здесь я переархитектурирую ответ, используя 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();
}
С 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" );