2010-06-10 3 views
44

J'ai simplement une chaîne qui ressemble à quelque chose comme ceci:Comptez le nombre de fois qu'une chaîne apparaît dans une chaîne

« 7, vrai, NA, faux: 67, faux, NA, faux: 5, faux, NA, false: 5, false, NA, false "

Tout ce que je veux faire est de compter combien de fois la chaîne" vrai "apparaît dans cette chaîne. Je me sens comme la réponse est quelque chose comme String.CountAllTheTimesThisStringAppearsInThatString() mais pour une raison quelconque, je ne peux pas le comprendre. Aidez-moi?

+2

http://stackoverflow.com/questions/541954/how-would-you-count-occurences-of-a-string-within -a-string-c/542136 # 542136 – jball

+6

@jball Je pense que toutes les solutions existent pour compter les occurrences d'un * caractère * – AakashM

+0

@AakashM, regardez le deuxième lien. En outre, ceci est l'opportunité parfaite pour fournir une réponse plus correcte (c'est-à-dire basée sur une chaîne, non basée sur un caractère) à cette question. – jball

Répondre

147
Regex.Matches(input, "true").Count 
+2

Basé sur la brièveté - vous gagnez;) – onekidney

+0

il n'y a pas de correspondance dans la chaîne C#. Oops. Regex. Nevermind – xarzu

+1

Pourquoi échappons-nous à 'input' ce n'est pas une expression régulière? – tpower

5

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; 
2

faites ceci, veuillez noter que vous devrez définir la regex 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 
3

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

Votre expression régulière devrait être \btrue\b de contourner la question 'miscontrue' Casper soulève. 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 dans la partie supérieure du dossier.

+1

La variable chaîne ne doit pas être appelée Regex - elle entre en conflit avec le nom de classe .NET Regex lui-même. – JustAMartin

14

Probablement pas le plus efficace, mais pense 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; 
    } 
} 
+2

ha ha - Je devrais marquer le vôtre comme juste juste pour utiliser mon nom de méthode proposé. :) – onekidney

3

Ici, je vais archiver la réponse en utilisant LINQ. montre simplement qu'il ya plus de moyens « n » de faire cuire 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(); 
} 
+0

Merci à son travail bien et intelligent aussi :) – Syed

Questions connexes