Compter le nombre de fois qu’une chaîne apparaît dans une chaîne

J’ai simplement une chaîne qui ressemble à ceci:

“7, true, NA, false: 67, false, NA, false: 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. Je pense que la réponse est quelque chose comme Ssortingng.CountAllTheTimesThisSsortingngAppearsInThatSsortingng() mais pour une raison quelconque, je ne peux pas le comprendre. Aidez-moi?

 Regex.Matches(input, "true").Count 

Probablement pas le plus efficace, mais pense que c’est une façon intéressante de le faire.

 class Program { static void Main(ssortingng[] args) { Console.WriteLine(CountAllTheTimesThisSsortingngAppearsInThatSsortingng("7,true,NA,false:67,false,NA,false:5,false,NA,false:5,false,NA,false", "true")); Console.WriteLine(CountAllTheTimesThisSsortingngAppearsInThatSsortingng("7,true,NA,false:67,false,NA,false:5,false,NA,false:5,false,NA,false", "false")); } static Int32 CountAllTheTimesThisSsortingngAppearsInThatSsortingng(ssortingng orig, ssortingng find) { var s2 = orig.Replace(find,""); return (orig.Length - s2.Length) / find.Length; } } 

Votre expression régulière devrait être \btrue\b pour contourner le problème de “la mauvaise interprétation” qu’évoque Casper. La solution complète ressemblerait à ceci:

 ssortingng searchText = "7,true,NA,false:67,false,NA,false:5,false,NA,false:5,false,NA,false"; ssortingng 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; 

Avec Linq …

 ssortingng 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" ); 

Ici, je sur-architecte la réponse en utilisant LINQ. Montre simplement qu’il y a plus d’un moyen de cuisiner un œuf:

 public int countTrue(ssortingng data) { ssortingng[] splitdata = data.Split(','); var results = from p in splitdata where p.Contains("true") select p; return results.Count(); } 

Faites ceci, veuillez noter que vous devrez définir le regex pour ‘test’ !!!

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