![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Работа со строками и текстом
Для представления отдельных символов в платформе.NET применяется структура System.Char, которая использует Unicode-кодировку UTF-16. Язык C# предлагает для Char псевдоним char. В структуре Char имеется экземплярный метод сравнения CompareTo(). Большинство статических методов Char нужны для выяснения принадлежности символа к одной из Unicode-категорий (таблица символов и категорий доступна по адресу https://www.blackbeltcoder.com/Resources/CharClass.aspx). Многие методы перегружены: они могут принимать в качестве аргумента либо отдельный символ, либо строку и номер символа в ней. Таблица 2 Статические методы структуры System.Char
Основным типом платформы.NET для работы со строками является класс System.String (псевдоним в C# – string). Этот класс представляет неизменяемый объект. Инициализация строки обычно выполняется при помощи строкового литерала. Однако класс String содержит конструкторы для создания строки из массива символов или символа, повторенного заданное количество раз. string literal = " This is a simple string"; string charArray = new string(new[] {'C', 'h', 'a', 'r'}); string charRepeated = new string('X', 3); Для строк определены операции == и! =. При этом выполняется посимвольное сравнение строк – используется семантика типов значений. string charArray = new string(new[] {'C', 'h', 'a', 'r'}); string charString = " Char"; Console.WriteLine(charArray == charString); // True Любая строка содержит индексатор для чтения отдельного символа. Кроме этого, символы строки можно перебрать при помощи цикла foreach. foreach (char ch in " This is a simple string") { Console.WriteLine(ch); } В языке C# соединение строк можно выполнить при помощи операции +, что транслируется в вызов метода String.Concat() (литералы соединяются на этапе компиляции). Статические элементы класса String приведены в табл. 3. Таблица 3 Статические элементы класса System.String
Сводка экземплярных методов класса String приведена в табл. 4. Ни один из этих методов не меняет строку, у которой вызывается. Конечно, некоторые методы создают и возвращают в качестве результата новые строки. Таблица 4 Экземплярные методы System.String
// один из способов перевернуть строку string source = " This is a simple string"; char[] charArray = source.ToCharArray(); Array.Reverse(charArray); string destination = new string(charArray); Так как класс String представляет неизменяемый объект, многократное использование методов для модификации строки (например, в цикле) снижает производительность. В пространстве имён System.Text размещён класс StringBuilder для работы с редактируемой строкой. StringBuilder применяет для хранения символов внутренний массив, который изменяется при редактировании строки (новые экземпляры объекта не создаются). Набор методов класса StringBuilder поддерживает основные операции редактирования строк (Append(), Insert(), Remove(), Replace()), а также получение «нормальной» строки из внутреннего массива. // создаём объект на основе строки и указываем ёмкость массива StringBuilder sb = new StringBuilder(" start", 300); for (int i = 1; i < 100; i++) { sb.Append(" abc"); // много раз добавляем к строке текст } string s = sb.ToString(); // получаем нормальную строку Платформа.NET предлагает поддержку работы с регулярными выражениями. Регулярное выражение (regular expression) – это строка-шаблон, которому может удовлетворять определённое множество слов. Регулярные выражения используются для проверки корректности информации (например, правильного формата адресов электронной почты), поиска и замены текста по определённому образцу. Коротко опишем синтаксис построения регулярных выражений[2]. В простейшем случае регулярное выражение – это последовательность букв или цифр. Тогда оно определяет именно то, что представляет. Но, как правило, регулярное выражение содержит некоторые особые спецсимволы. Первый набор таких спецсимволов позволяет определить символьные множества (табл. 5). Таблица 5 Символьные множества в регулярных выражениях
В регулярном выражении можно использовать особые символы для начала строки ^, конца строки $, границы слова \b, символа табуляции \t и перевода строки \n. Отдельные атомарные регулярные выражения допустимо обрамлять в группы, при помощи пары скобок (). Если необходимо, группы или выражения можно объединять, используя символ |. К каждому символу или группе можно присоединить квантификаторы повторения: ? повтор 0 или 1 раз; + повтор от 1 до бесконечности; * повтор от 0 до бесконечности; {n} повтор n раз ровно; {n, m} повтор от n до m раз; {n, } повтор от n раз до бесконечности; Рассмотрим некоторые простые примеры регулярных выражений: ^\s*$ пустая строка \btext\b отдельное слово text \b[bcf]at\b слова bat, cat, fat В.NET имеется пространство имён System.Text.RegularExpressions, содержащее набор типов для работы с регулярными выражениями. Основной тип для работы с регулярными выражениями – это класс Regex. Объект класса представляет одно регулярное выражение, которое указывается при вызове конструктора. Существует перегруженная версия конструктора, позволяющая указать различные опции для создаваемого регулярного выражения. Regex re1 = new Regex(@" \b[bcf]at\b"); Regex re2 = new Regex(@" \b[bcf]at\b", RegexOptions.IgnoreCase); Для поиска информации согласно текущему регулярному выражению можно использовать метод Regex.IsMatch(). Более продуктивным является применение функции Match(), которая возвращает объект класса Match. Regex re = new Regex(@" \b[bcf]at\b", RegexOptions.Compiled); Match match = re.Match(" bad fat cat"); while (match.Success) { Console.WriteLine(match.Index); Console.WriteLine(match.Value); match = match.NextMatch(); } Для замены на основе регулярных выражений используется метод Regex.Replace(). Его аргументы – обрабатываемая строка и строка на замену.
|