2010-02-24 7 views
5

Я работаю в .net C#, и у меня есть текст строки = «Какой бы текст FFF вы не могли представить FFF»; Мне нужно получить количество раз, когда в тексте строки появляется «FFF». Как я могу это исправить? Спасибо.Количество конкретных строк внутри строки

+0

Я считаю, что «частота» - лучшее слово, чем «количество». – polygenelubricants

+0

Учитывается ли «X FFFF Y» как ноль, одно или два совпадения? –

+2

@polygenelubricants: Нет, «количество» лучше, чем «частота» здесь. (Хотя «число» было бы более идиоматичным, чем «количество».) Количество * * просто означает подсчет. Частота * * подразумевает счетчик * относительно того, как часто это происходит, учитывая размер выборки *. Например, * количество * «FFF» в данном предложении равно двум. * Частота * FFF - это «каждое третье слово». –

ответ

7

Вы можете использовать регулярные выражения для этого и прямо все, что вы хотите:

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

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

спасибо, что много прекрасно работает – euther

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

спасибо очень. – euther

0

Используйте System.Text.RegularExpressions.Regex для этого:

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

Вот 2 подходы. Обратите внимание, что регулярное выражение должно использовать метасимвол слова \b, чтобы избежать неправильного совпадения вхождений с другими словами. Решения, размещенные до сих пор, этого не делают, что неверно считать «FFF» в «fooFFFbar» как совпадение.

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 за полезную информацию. Однако ОП никогда не указывает, что он считает слова, поэтому это вопрос интерпретации. –

+0

@ João спасибо, I + 1 вы раньше, прежде чем принимать решение об этих дополнительных подходах. –

0

Вот альтернатива регулярных выражений:

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; 

Вы можете легко настроить это использовать несколько различных строк, если это необходимо.

Смежные вопросы