2010-06-10 48 views
44

Simplemente tengo una cadena que se ve algo como esto:Contar el número de veces que aparece una cadena dentro de una cadena

"7, es cierto, NA, falsa: 67, falsa, NA, falsa: 5, falso, NA, falso: 5, falso, NA, falso "

Todo lo que quiero hacer es contar cuántas veces aparece la cadena" true "en esa cadena. Siento que la respuesta es algo así como String.CountAllTheTimesThisStringAppearsInThatString() pero por alguna razón no puedo entenderlo. ¿Ayuda?

+2

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

+6

@jball Creo que todas las soluciones existen para contar las ocurrencias de un * carácter * – AakashM

+0

@AakashM, mira el segundo enlace. Además, esta es la oportunidad perfecta para proporcionar una respuesta más correcta (es decir, basada en cadenas, no basada en caracteres) a esa pregunta. – jball

Respuesta

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

Basado solo en la brevedad: usted gana;) – onekidney

+0

no hay coincidencias en la cadena C#. Uy. Regex. No importa – xarzu

+1

¿Por qué estamos escapando 'input' no es una expresión regular? – tpower

5

Esto fallará aunque la cadena pueda contener cadenas como "error de ejecución".

Regex.Matches("7,true,NA,false:67,false,NA,false:5,false,NA,false:5,false,NA,false", "true").Count; 
2

hacer esto, tenga en cuenta que tendrá que definir la expresión regular para 'prueba' !!!

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

Con 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

Su expresión regular no debe ser \btrue\b de moverse por el tema 'miscontrue' Casper hace subir. La solución completa se vería así:

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; 

Asegúrese de que el espacio de nombres System.Text.RegularExpressions se incluye en la parte superior del archivo.

+1

La variable de cadena no se debe llamar Regex: colisiona con el nombre de la clase .NET Regex. – JustAMartin

14

Probablemente no sea el más eficiente, pero creo que es una buena manera de hacerlo.

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 - Debo marcar el suyo como correcto solo por usar el nombre de método propuesto. :) – onekidney

3

Aquí, voy a sobre-diseñar la respuesta usando LINQ. Sólo demuestra que hay más maneras 'n' para cocinar un huevo:

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

Gracias su trabajo bien y también inteligente :) – Syed

Cuestiones relacionadas