Нужно в тексте подсчитать количество определенных слов, например:
Словом можно убить, словом можно спасти.
Нужно посчитать, сколько раз в строке(или тексте) встречается слово "Словом", и записать результат в переменную.
Для разделения строки на слова можно воспользоваться методом Split
и передать в параметре символы для деления.
String s = "Словом можно убить, словом можно спасти.";
String sSearch = "словом";
String[] words = s.Split(new char[] { ' ', ',' });
int counter = 0;
foreach (var word in words)
{
if (sSearch == word.ToLower())
counter++;
}
Console.WriteLine(counter);
Console.ReadKey();
А я бы сделал так:
Есть к примеру у нас строка:
string str = "Словом можно убить, словом можно спасти.";
Нам надо для начала перевести ее в нижний регистр (ToLower()
), далее разбить на слова. Как на мой взгляд это хорошо делает Regex.Split
(ибо ему не надо задавать все знаки для "разбития"). Ну и дальше, имея массив всех слов, мы можем сгруппировать их и составить новую коллекцию, которая будет содержать кол-во найденных слов и само слово. Исходя из этого, наша строка будет примерно следующей:
var words = Regex.Split(str.ToLower(), @"\W+")
.Where(x => !string.IsNullOrEmpty(x))
.GroupBy(g => g)
.Select(s => new {Word = s.Key, Count = s.Count()});
Собственно все. Можно теперь смело выводить все, что нам требуется:
var count = words.FirstOrDefault(x => x.Word == "словом")?.Count;
Если нам не нужно знать о других словах, то можно немного переписать:
var words = Regex.Split(str.ToLower(), @"\W+")
.Where(x => x == "словом")
.GroupBy(g => g)
.Select(s => new {Word = s.Key, Count = s.Count()})
.FirstOrDefault()?.Count;
* Select
в данном примере является неким удобством, что бы мы знали и слово и кол-во найденных соответствий. На выходе получим int?
, который вернет число найденных слов, либо null, если такого слова не найдено.
Ну, если нужно просто кол-во слов, то можно вообще поступить следующим образом:
int words = Regex.Split(str.ToLower(), @"\W+").Count(x => x == "словом");
Постройте на основе слова регулярку вида \bслово\b
и посчитайте количество совпадений. \b
- это граница слова. Слово прогоните через Regex.Escape
, чтобы экранировать спецсимволы.
using System.Text.RegularExpressions;
....
string source = "Словом можно убить, словом можно спасти.";
string word = "словом";
int count = Regex.Matches(
source,
$"\\b{Regex.Escape(word)}\\b", RegexOptions.IgnoreCase)
.Count; // 2
Всё предельно просто, ищем количество вхождений подстроки регулярным выражением.
using System.Text.RegularExpressions;
Метод:
private int countWord(string source, string search)
{
string pattern = $"\\b{Regex.Escape(search)}\\b";
return new Regex(pattern, RegexOptions.IgnoreCase).Matches(source).Count;
}
Применение:
int count = countWord("Словом можно убить, словом можно спасти.", "словом");
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я генерирую SVG файлы на C#, необходимо используя C# отрендерить их в JPG или PNGКак это можно сделать?