Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Работа со строками и текстом






Для представления отдельных символов в платформе.NET применяется структура System.Char, которая использует Unicode-кодировку UTF-16. Язык C# предлагает для Char псевдоним char.

В структуре Char имеется экземплярный метод сравнения CompareTo(). Большинство статических методов Char нужны для выяснения принадлежности символа к одной из Unicode-категорий (таблица символов и категорий доступна по адресу https://www.blackbeltcoder.com/Resources/CharClass.aspx). Многие методы перегружены: они могут принимать в качестве аргумента либо отдельный символ, либо строку и номер символа в ней.

Таблица 2

Статические методы структуры System.Char

Имя метода Описание
ConvertFromUtf32() Преобразует целочисленный суррогатный UTF-код в строку
ConvertToUtf32() Преобразует пару суррогатных символов[1] в UTF-код
GetNumericValue() Возвращает численное значение символа, если он является цифрой, и –1.0 в противном случае
GetUnicodeCategory() Метод возвращает элементы перечисления UnicodeCategory, описывающего категорию символа
IsControl() Возвращает true, если символ является управляющим
IsDigit() Возвращает true, если символ является десятичной цифрой
IsLetter() Возвращает true, если символ является буквой
IsLetterOrDigit() Возвращает true, если символ является буквой или цифрой
IsLower() Возвращает true, если символ – это буква в нижнем регистре
IsNumber() Возвращает true, если символ является десятичной или шестнадцатеричной цифрой
IsPunctuation() Возвращает true, если символ является знаком препинания
IsSeparator() Возвращает true, если символ является разделителем
IsSurrogate() Возвращает true, если символ является суррогатным
IsUpper() Возвращает true, если символ – это буква в верхнем регистре
IsWhiteSpace() Возвращает true, если символ является пробельным (например, пробел, символ конца строки, символ перевода каретки)
Parse() Преобразует строку в символ. Строка должна состоять из одного символа, иначе генерируется исключение
ToLower() Приводит символ к нижнему регистру
ToUpper() Приводит символ к верхнему регистру
TryParse() Пытается преобразовать строку в символ

Основным типом платформы.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

Имя элемента Описание
Empty Свойство только для чтения, которое возвращает пустую строку
Compare() Сравнение двух строк. Реализации метода позволяют сравнивать как строки, так и подстроки. При этом можно учитывать регистр и алфавит конкретного языка
CompareOrdinal() Сравнение двух строк. Реализации метода позволяют сравнивать как строки, так и подстроки. Сравниваются коды символов
Concat() Конкатенация произвольного числа строк
Concat< T> () Метод выполняет проход по указанной коллекции, преобразование каждого элемента в строку и конкатенацию полученных строк
Copy() Создаёт копию строки
Format() Выполняет форматирование строки в соответствии с заданными спецификациями формата
Join() Соединение элементов массива строк или коллекции строк в единую строку. При этом между элементами вставляются разделители
Join< T> () Метод выполняет проход по указанной коллекции, преобразование каждого элемента в строку и соединение полученных строк. При этом между элементами вставляются разделители
IsNullOrEmpty() Проверяет, является ли аргумент пустой строкой или null
IsNullOrWhiteSpace() Проверяет, является ли аргумент пустой строкой, null или состоит только из пробельных символов

Сводка экземплярных методов класса String приведена в табл. 4. Ни один из этих методов не меняет строку, у которой вызывается. Конечно, некоторые методы создают и возвращают в качестве результата новые строки.

Таблица 4

Экземплярные методы System.String

Имя метода Описание
CompareTo() Сравнивает строки для выяснения порядка
Insert() Вставляет подстроку в заданную позицию
Remove() Удаляет подстроку в заданной позиции
Replace() Заменяет подстроку в заданной позиции на новую подстроку
Split() Разбивает строку на массив слов. Допускает указание разделителя слов (по умолчанию – пробел), а также опции для удаления пустых слов из итогового массива
Substring() Выделяет подстроку в заданной позиции
CopyTo() Копирует указанный фрагмент строки в массив символов
Conatains() Определяет вхождение заданной подстроки
IndexOf(), IndexOfAny(), LastIndexOf(), LastIndexOfAny() Определяются индексы первого и последнего вхождения заданной подстроки или любого символа из заданного набора
StartsWith(), EndsWith() Возвращается true или false, в зависимости от того, начинается или заканчивается строка заданной подстрокой. При этом можно учитывать регистр и алфавит конкретного языка
PadLeft(), PadRight() Выполняют «набивку» нужным числом пробелов в начале или в конце строки
Trim(), TrimStart(), TrimEnd() Удаляются пробелы в начале и в конце строки, или только с одного её конца
ToCharArray() Преобразование строки в массив символов
ToLower(), ToUpper(), ToLowerInvariant(), ToUpperInvariant() Изменение регистра символов строки

// один из способов перевернуть строку

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

Символьные множества в регулярных выражениях

Выражение Значение Обратное по смыслу выражение
[abcdef] Один символ из списка [^abcdef]
[a-f] Один символ из диапазона [^a-f]
\d Десятичная цифра (аналог [0-9]) \D
\w Словообразующий символ (зависит от текущей языковой культуры; например, для английского языка это [a-zA-Z_0-9]) \W
\s Пробельный символ (пробел, табуляция, новая строка, перевод каретки) \S
\p{…} Любой символ из указанной Unicode-категории. Например, \p{P} – символы пунктуации \P{…}
. Любой символ, кроме \n \n

В регулярном выражении можно использовать особые символы для начала строки ^, конца строки $, границы слова \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(). Его аргументы – обрабатываемая строка и строка на замену.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.