Глава 14.
символы, строки
и обработка текста
Эта глава посвящена приемам обработки отдельных символов, а также целых строк
в Microsoft .NET Framework. Вначале
рассматриваются структура
System.Char
и способы работы с символами. Потом мы перейдем к весьма полезному классу
System.String
, предназначенному для работы с неизменяемыми строками (такую
строку можно создать, но не изменить). Затем рассказывается о динамическом
построении строк с помощью класса
System.Text.StringBuilder
. Разобравшись
с основами работы со строками, мы обсудим вопросы
форматирования объектов
в строки и эффективного сохранения и передачи строк в различных кодировках.
В конце главы рассказывается о классе
System.Security.SecureString
, который
может использоваться для защиты конфиденциальных строк данных, таких как
пароли и номера кредитных карт.
символы
Символы в .NET Framework всегда представлены 16-разрядными кодами стандарта
Юникод, что облегчает разработку многоязыковых приложений. Символ пред-
ставляется
экземпляром структуры
System.Char
(значимый тип). Тип
System.Char
довольно прост, у него лишь два открытых неизменяемых поля: константа
MinValue
,
определенная как
'\0'
, и константа
MaxValue
, определенная как
'\uffff'
.
Для экземпляра
Char
можно вызывать статический метод
GetUnicodeCategory
,
который возвращает значение перечислимого типа
System.Globalization.
UnicodeCategory
, показывающее категорию символа:
управляющий символ, символ
валюты, буква в нижнем или верхнем регистре, знак препинания, математический
символ и т. д. (в соответствии со стандартом Юникод).
Для облегчения работы с типом
Char
имеется несколько статических методов,
например:
IsDigit
,
IsLetter
,
IsWhiteSpace
,
IsUpper
,
IsLower
,
IsPunctuation
,
Is-
LetterOrDigit
,
IsControl
,
IsNumber
,
IsSeparator
,
IsSurrogate
,
IsLowSurrogate
,
IsHighSurrogate
и
IsSymbol
. Большинство этих методов обращается
к
GetUnicodeCategory
и возвращает
true
или
false
. В
параметрах этих методов
передается либо одиночный символ, либо экземпляр
String
и индекс символа
в строке.
Кроме того, статические методы
ToLowerInvariant
и
ToUpperInvariant
по-
зволяют преобразовать символ в его эквивалент в нижнем или верхнем регистре
357
Символы
без учета региональных стандартов. Для преобразования символа с учетом регио-
нальных стандартов (culture), относящихся к вызывающему потоку (эти сведения
методы
получают, запрашивая статическое свойство
CurrentCulture
типа
System.
Globalization.CultureInfo
), служат методы
ToLower
и
ToUpper
. Чтобы задать
конкретный набор региональных стандартов, передайте этим методам экземпляр
класса
CultureInfo
. Данные о региональных стандартах необходимы методам
ToLower
и
ToUpper
, поскольку от них зависит результат операции изменения ре-
гистра буквы.
Например, в турецком языке символ U+0069 (латинская строчная
буква i) при переводе в верхний регистр становится символом U+0130 (латинская
прописная буква I с надстрочной точкой), тогда как в других языках — это символ
U+0049 (латинская прописная буква I).
Помимо перечисленных статических методов, у типа
Char
есть также несколь-
ко собственных экземплярных методов. Метод
Equals
возвращает
true
,
если два
экземпляра
Char
представляют один и тот же 16-разрядный символ Юникода. Ме-
тод
CompareTo
(определенный в интерфейсах
IComparable
и
IComparable
)
сравнивает два кодовых значения без учета региональных стандартов. Метод
Con-
vertFromUtf32
создает строку, состоящую из одного или двух символов UTF-16,
для одного символа UTF-32. Метод
ConvertToUtf32
создает символ UTF-32 для
суррогатной пары или строки. Метод
ToString
возвращает строку, состоящую из
одного символа, тогда как
Parse
и
TryParse
получают односимвольную строку
String
и возвращают соответствующую кодовую позицию UTF-16.
Наконец, метод
GetNumericValue
возвращает числовой эквивалент символа.
Это можно продемонстрировать на следующем примере:
using System;
public static class Program {
public static void Main() {
Double d; // '\u0033' – это "цифра 3"
d = Char.GetNumericValue('\u0033'); // Параметр '3'
// даст тот же результат
Console.WriteLine(d.ToString()); // Выводится "3"
// '\u00bc' — это "простая дробь одна четвертая ('1/4')"
d = Char.GetNumericValue('\u00bc');
Console.WriteLine(d.ToString()); // Выводится "0.25"
// 'A' — это "Латинская прописная буква A"
d = Char.GetNumericValue('A');
Console.WriteLine(d.ToString()); // Выводится "-1"
}
}
А теперь представлю в порядке предпочтения три способа преобразования раз-
личных числовых типов в экземпляры типа
Char
, и наоборот.
Do'stlaringiz bilan baham: