J'ai simplement une chaîne qui ressemble à ceci:
"7, vrai, NA, faux: 67, faux, NA, faux: 5, faux, NA, faux: 5, faux, NA, faux"
Tout ce que je veux faire, c'est compter combien de fois la chaîne "true" apparaît dans cette chaîne. J'ai l'impression que la réponse est quelque chose comme String.CountAllTheTimesThisStringAppearsInThatString()
mais pour une raison quelconque, je ne peux pas le comprendre. Aidez-moi?
Regex.Matches(input, "true").Count
Probablement pas le plus efficace, mais pensez que c'est une bonne façon de le faire.
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;
}
}
Votre expression régulière doit être \btrue\b
pour contourner le problème de "mauvaise interprétation" soulevé par Casper. La solution complète ressemblerait à ceci:
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;
Assurez-vous que l'espace de noms System.Text.RegularExpressions est inclus en haut du fichier.
Cela échouera cependant si la chaîne peut contenir des chaînes comme "miscontrue".
Regex.Matches("7,true,NA,false:67,false,NA,false:5,false,NA,false:5,false,NA,false", "true").Count;
Ici, je vais sur-architecturer la réponse en utilisant LINQ. Montre simplement qu'il y a plus que 'n' façons de cuisiner un œuf:
public int countTrue(string data)
{
string[] splitdata = data.Split(',');
var results = from p in splitdata
where p.Contains("true")
select p;
return results.Count();
}
Avec 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" );
faites cela, veuillez noter que vous devrez définir l'expression régulière pour '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