2010-02-24 9 views
5

Estoy trabajando en .net C# y tengo una cadena text = "Cualquier texto que FFF pueda imaginarse FFF"; Lo que necesito es obtener la cantidad de veces que aparece el "FFF" en el texto de la cadena. ¿Cómo puedo lograr eso? Gracias.Cantidad de cadenas específicas dentro de una cadena

+0

Creo que "frecuencia" es la mejor palabra que "cantidad". – polygenelubricants

+0

¿"X FFFF Y" cuenta como cero, una o dos coincidencias? –

+2

@polygenelubricants: No, "cantidad" es mejor que "frecuencia" aquí. (Aunque "el número" sería más idiomático que "la cantidad".) Una * cantidad * simplemente implica un conteo. Una * frecuencia * implica un recuento * con respecto a la frecuencia con que ocurre dado el tamaño de la muestra *. Por ejemplo, la * cantidad * de "FFF" en la oración dada es dos. La * frecuencia * de "FFF" es "cada tercera palabra". –

Respuesta

7

Se pueden utilizar expresiones regulares para esto y derecho sobre cualquier cosa que desee:

string s = "Whatever text FFF you can FFF imagine"; 

Console.WriteLine(Regex.Matches(s, Regex.Escape("FFF")).Count); 
+0

gracias tanto funciona perfectamente – euther

0
Regex.Matches(text, "FFF").Count; 
+0

muchas gracias. – euther

0

Uso del System.Text.RegularExpressions.Regex para esto:

string p = "Whatever text FFF you can FFF imagine"; 
var regex = new System.Text.RegularExpressions.Regex("FFF"); 
var instances = r.Matches(p).Count; 
// instances will now equal 2, 
3

Éstos son 2 enfoques. Tenga en cuenta que la expresión regular debería usar el metacaracter del límite de palabras \b para evitar coincidencias incorrectas con otras palabras. Las soluciones publicadas hasta ahora no hacen esto, lo que incorrectamente contará "FFF" en "fooFFFbar" como una coincidencia.

string text = "Whatever text FFF you can FFF imagine fooFFFbar"; 

// use word boundary to avoid counting occurrences in the middle of a word 
string wordToMatch = "FFF"; 
string pattern = @"\b" + Regex.Escape(wordToMatch) + @"\b"; 
int regexCount = Regex.Matches(text, pattern).Count; 
Console.WriteLine(regexCount); 

// split approach 
int count = text.Split(' ').Count(word => word == "FFF"); 
Console.WriteLine(count); 
+1

+1 para la información útil. Sin embargo, el OP nunca especifica que está contando palabras, así que es una cuestión de interpretación. –

+0

@ João gracias, I + 1 ya lo habías hecho antes de decidir publicar con estos enfoques adicionales. –

0

Aquí es una alternativa a las expresiones regulares:

string s = "Whatever text FFF you can FFF imagine FFF"; 
//Split be the number of non-FFF entries so we need to subtract one 
int count = s.Split(new string[] { "FFF" }, StringSplitOptions.None).Count() - 1; 

Desde aquí se puede modificar esto para usar varias cadenas diferentes si es necesario.

Cuestiones relacionadas