Как найти английские буквы?

Как найти английские буквы в тексте?

Не давно мне попалась задача, в которой требовалось найти английские буквы в переданном в метод фрагменте текста. Задача довольно простая и есть несколько способов её решения, некоторые из которых я хочу показать в этой статье.

И так, предположим, что нам дана строка, которая содержит следующий текст:

string str = "Я drink 526 coffee в машине";

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

Переходим к решению. Как Вы, наверное, знаете, в языке c# любая строка представляет собой набор символов, это значит что приведенную строку, мы можем представить себе следующим образом:

char [] str = {'Я','','d','r','i','n','k', ... };

Чтобы найти английские буквы нам нужно создать массив, который содержит все буквы английского алфавита, и сравнить каждый символ данной нам строки с каждым элементом созданного массива, например это можно сделать следующим образом:

string str = "Я drink 526 coffee в машине";
//все английские буквы
List<char> engLellers = new List<char> {'a','b','c','d', ...};
//список найденных букв
List<char> foundLellers = new List<char>();
foreach(char ch in str.ToLowerInvariant())
{
if (Char.IsLetter(ch) & engLellers.Contains(ch))
{
foundLellers.Add(ch);
}
}

результат

1

С помощью метода IsLetter мы определяем, является ли текущий символ буквой, если нет, то пропускаем его.

Сразу же скажу, что необязательно использовать цикл, можно сократить количество кода, например, воспользовавшись, лямбда выражением:

foundLellers = str.ToLowerInvariant().Where(x =>
Char.IsLetter(x) & engLellers.Contains(x)).ToList();

Получаем тот же самый результат.

В принципе задача решена, но самый, наверное, большой минус в таком решении, заключается в том, что нам, чтобы найти английские буквы, приходиться создавать дополнительный массив и вручную заполнять его латинскими буквами. Было бы не плохо обойтись без этого действия, но как это сделать?

Решение на самом деле очень простое. В одной из предыдущих статей, я рассказывал, как можно быстро получить все буквы русского и английского алфавита. Этот же способ мы можем использовать и при решении данной задачи, например:

foundLellers = str.ToLowerInvariant().Where(x =>
Char.IsLetter(x) & (int)x >= 97 & (int)x  122).ToList();

Результат будет тот же самый.

На этом всё, если вопросы по теме, то оставляйте их в комментариях.

Читайте также:

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*