2010-02-24 28 views
5

.net C# içinde çalışıyorum ve bir string metnim var = "FFF'nin hayal edebileceği herhangi bir metin hangisi olursa olsun"; İhtiyacım olan şey, dize metninde "FFF" nin görüntülenme miktarını elde etmektir. Bunu nasıl yapabilirim? Teşekkür ederiz.Bir dizenin içindeki belirli dizgilerin sayısı

+0

"Frekans" ın "miktar" dan daha iyi bir kelime olduğuna inanıyorum. – polygenelubricants

+0

"X FFFF Y" sıfır, bir veya iki eşleşme olarak sayılıyor mu? –

+2

@polygenelubricants: Hayır, "miktar" burada "frekans" dan daha iyidir. (“Sayı”, “miktar” dan daha idiyotik olsa da.) A * miktar * sadece bir sayı anlamına gelir. A * frekansı * numunenin boyutu göz önüne alındığında ne sıklıkla meydana geldiğine dair bir sayı * belirtmektedir. Örneğin, verilen cümlede "FFF" nin * miktarı * ikidir. "FFF" nin * frekansı "her üçüncü kelime" dir. –

cevap

7

Bunun için normal ifadeleri kullanabilirsiniz ve sağ şey hakkında istediğiniz:

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

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

teşekkürler mucho mükemmel çalışıyor – euther

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

çok teşekkür ederim. Yararlı bilgi için – euther

0

bunu kullanın için System.Text.RegularExpressions.Regex: Burada

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

olan 2 yaklaşımlar. Normal ifadelerin diğer kelimelerle eşleşmesini önlemek için normal ifadenin \b meta karakterini kullanması gerektiğini unutmayın. Şimdiye kadar gönderilen çözümler, yanlış bir şekilde "fooFFFbar" içindeki "FFF" yi bir eşleşme olarak sayar. Kolayca gerekirse birkaç farklı dizeleri kullanmak için bu ince ayar olabilir

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; 

:

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. Ancak OP hiçbir zaman kelimeleri saydığını ve bu yüzden bir yorumlama meselesi olduğunu belirtir. –

+0

@ João teşekkürler, bu ek yaklaşımlarla göndermeye karar vermeden önce daha önce sizi + 1'lediniz. –

0

İşte düzenli ifadeler bir alternatiftir.

İlgili konular