Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Демонстрация. Создание и использование массивов




Solution: NET.CSharp.02

Project: ArrayApplication

Урок 6. Строки, символы и работа с текстом

В уроке рассматриваются приемы работы с отдельными символами и строками в.NET Framework. В частности, будут изучены структура System.Char и способы работы с символами, класс System.String, предназначенный для работы с неизменяемыми строками, а также динамическое создание строк с помощью класса System.Text.StringBuilder. В уроке также будут рассмотрены регулярные выражения и возможности, предоставляемые библиотекой классов.NET Framework для работы с ними.

Символы

Символ в.NET Framework всегда представлен 16-разрядным кодом Unicode и представляет собой экземпляр структуры System.Char. В C# для существует целочисленный тип char, являющийся псевдонимом для System.Char. Тип System.Char содержит два открытых неизменяемых поля: константы MinValue, определенная как \0, и MaxValue, определенная как \uffff.

Для экземпляра сhar можно вызывать статический метод GetUnicodeCategory, который возвращает значение перечислимого типа System.Globalization.UnicodeCategory, показывающее категорию символа: управляющий символ, символ валюты, буква в нижнем или верхнем регистре, знак пунктуации, математический символ и т. д. (в соответствии со стандартом Unicode).

Для работы с типом сhar существует несколько статических методов, например: IsDigit, IsLetter, IsWhiteSpace, IsUpper, IsLower, IsPunctuation, isLetterOrDigit, IsControl, isNumber, IsSeparatorи и т.д. Большинство этих методов обращается к GetUnicodeCategory и возвращает true или false. В качестве параметров эти методы принимают либо одиночный символ, либо тип string с указанием индекса символа в строке.

Метод Описание
ConvertFromUtf32 Преобразует целочисленный суррогатный UTF-код в строку
ConvertToUtf32 Преобразует пару суррогатных символов в UTF-код
GetNumericValue Преобразовывает указанный числовой символ Юникод в число двойной точности с плавающей запятой
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 Пытается преобразовать строку в символ

Помимо перечисленных выше статических методов, у типа сhar есть также несколько экземплярных методов. Метод Equals возвращает true, если два экземпляра Char представляют один и тот же 16-разрядный Unicode-символ. Метод СоmраrеТо сравнивает два кодовых значения без учета региональных стандартов. Метод ToString возвращает строку, состоящую из одного символа.

double d = Char.GetNumericValue('\u0033');

Console.WriteLine(d.ToString()); // Displays "3"

 

// ‘\u00bc’ is the “vulgar fraction one quarter ('¼')”

d = Char.GetNumericValue('\u00bc');

Console.WriteLine(d.ToString()); // Displays "0.25"

 

// ‘A’ is the “Latin capital letter A”

d = Char.GetNumericValue('A');

Console.WriteLine(d.ToString()); // Displays "-1"

Существует несколько способов преобразования различных числовых типов в экземпляры типа сhar и наоборот. Самый эффективным способом является приведение типа, поскольку в этом случае компилятор генерирует IL-команды преобразования без вызовов каких-либо методов, а, следовательно, для преобразования char в числовое значение, такое как int, оно подходит лучше всего. При этом можно указывать, какой код выполняет преобразование: проверяемый или непроверяемый (checked, unchecked). Кроме того, у типа System.Convert есть несколько статических методов, корректно преобразующих char в числовой тип и обратно. Все эти методы выполняют преобразование как проверяемую операцию, чтобы в случае потери данных при преобразовании генерировалось исключение OverflowException.

char c;

int n;

// Convert number <-> character using C# casting

c = (char)65;

Console.WriteLine(c);// Displays "A"

n = (int)c;

Console.WriteLine(n);// Displays "65"

c = unchecked((char)(65536 + 65));

Console.WriteLine(c); // Displays "A"

// Convert number <-> character using Convert

c = Convert.ToChar(65);

Console.WriteLine(c);// Displays "A"

n = Convert.ToInt32(c);

Console.WriteLine(n); // Displays "65"

// This demonstrates Convert's range checking

try

{

c = Convert.ToChar(70000);// Too big for 16-bits

Console.WriteLine(c);// Doesn't execute

}

catch (OverflowException)

{

Console.WriteLine("Can't convert 70000 to a Char.");

}

http://msdn.microsoft.com/ru-ru/library/system.char.aspx

http://msdn.microsoft.com/ru-ru/library/x9h8tsay.aspx

Строки

Для работы со строками символов в кодировке Unicode в С# предназначен встроенный тип string, являющийся псевдонимом класса System.String. Тип string относится к ссылочным типам, хотя работа с ним во многом напоминает работу со значимыми типами.

В С# оператором new нельзя создавать объекты string из литеральных строк. Вместо этого используется более простой синтаксис.

string s = new string ("Hi there.");// CTE

string s = "Hi there.";

Однако у класса String достаточно много конструкторов, которые позволяют конструировать строку из массива символов или символа, повторенного заданное количество раз.

string s = new string(' ', 20);

 

char[] a = { 'a', 'b', 'c', 'd', 'e' };

string s = new string(a);

 

char[] a1 = { 'a', 'b', 'c', 'd', 'e' };

string v1 = new string(a, 0, 2);

В С# имеется специальный синтаксис для ввода литеральных строк в исходный код. Для вставки специальных символов, таких как конец строки, возврат каретки, забой, в С# используются управляющие последовательности (escape-последовательности)

string s = "Hi\r\nthere.";

Несколько строк можно объединить в одну строку с помощью операции «+» языка С#:

string s = "Hi" + " " + "there.";

Поскольку все строки в данном коде литеральные, компилятор выполняет их конкатенацию на этапе компиляции, и в результате в метаданных модуля окажется лишь строка «Hi there.». Конкатенация нелитеральных строк оператором «+» выполняется на этапе выполнения. Для конкатенации нескольких строк в период выполнения оператор «+» применять нежелательно, так как он создает в куче несколько строковых объектов. Вместо желательно использовать тип System.TextStringBuilder.

В С# есть особый способ объявления строки, в которой все символы между кавычками трактуются как часть строки. Это так называемые буквальные строки (verbatim strings), которые обычно используют при задании пути к файлу или каталогу и при работе с регулярными выражениями.

string file = "С:\\Windows\\System32\\Notepad.exe";

string file = @"C:\Windows\System32\Notepad.exe";

Cимвол @ перед строкой во втором случае сообщает компилятору, что перед ним буквальная строка, символ «\» не является признаком управляющей последовательности.

С объектом типа string можно работать посимвольно, т. е., поэлементно. Для просмотра отдельных символов в пределах строки предназначен ряд методов и свойств, в числе которых Length, индексатор, GetEnumerator, ToCharArray, Contains, IndexOf, LastIndexOf, IndexOfAny и LastIndexOfAny. Класс string обладает богатым набором методов для сравнения строк, поиска в строке и других действий со строками, представленных свойствами, статическими и экземплярными методами. В следующей таблице приведены основные методы для работы со строками.

Член Описание
Compare (статический метод) Сравнение двух строк в лексикографическом (алфавитном) порядке. Разные реализации метода позволяют сравнивать строки с учетом, или без учета регистра.
CompareTo (экземплярный метод) Сравнение текущего экземпляра строки с другой строкой.
Concat (статический метод) Слияние произвольного числа строк.
Copy (статический метод) Создание копии строки.
Empty (статическое поле) Открытое статическое поле, представляющее пустую строку.
Format (статический метод) Форматирование строки в соответствии с заданным форматом.
IndexOf, LastIndexOf (экземплярные методы) Определение индекса первого или, соответственно, последнего вхождения подстроки в данной строке.
IndexOfAny, LastIndexOfAny (экземплярные метод) Определение индекса первого или, соответственно, последнего вхождения любого символа из подстроки в данной строке.
Insert (экземплярный методы) Вставка подстроки в заданную позицию.
Join (статический метод) Слияние массива строк в единую строку. Между элементами массива вставляются разделители.
Length (свойство) Возвращает длину строки.
PadLeft, PadRigth (экземплярные методы) Выравнивают строки по левому или, соответственно, правому краю путем вставки нужного числа пробелов в начале, или в конце строки.
Remove (экземплярный метод) Удаление подстроки из заданной позиции.
Replace (экземплярный метод) Замена всех вхождений заданной подстроки, или символа новыми подстрокой, или символом.
Split (экземплярный метод) Разделяет строку на элементы, используя разные разделители. Результаты помещаются в массив строк.
EndWith EndWith (экземплярные методы) Возвращают true или false в зависимости от того, начинается, или заканчивается строка заданной подстрокой.
Substring (экземплярный метод) Выделение подстроки, начиная с заданной позиции.
ToCharArray (экземплярный метод) Преобразует строку в массив символов.
ToLower, ToUpper (экземплярные методы) Преобразование строки к нижнему или,соответственно, к верхнему регистру.
Trim, TrimStart, TrimEnd (экземплярные методы) Удаление пробелов в начале и конце строки, или только с начала, или только с конца соответственно.

Следующий фрагмент кода показывает использование методов разделения строки на элементы Split и слияние массива строк в единую строку Join.

string source = "тучки небесные вечные странники";

char[] separators = {' '};

string[] parts = source.Split(separators);

Console.WriteLine("Результат разбиения строки на части: ");

for (int i = 0; i < parts.Length; i++)

{

Console.WriteLine(parts[i]);

}

string result = String.Join(" | ", parts);

Console.WriteLine("Результат сборки: ");

Console.WriteLine(result);

Используя метод Split можно вводить двумерный массив не поэлементно, а построчно.

class Program

{

static void Main(string[] args)

{

int[][] MyArray;

Console.Write("Введите количество строк: ");

int n = int.Parse(Console.ReadLine());

MyArray = new int[n][];

for (int i = 0; i < MyArray.Length; i++)

{

Console.Write("Введите элементы {0} строки: ", i);

string line = Console.ReadLine();

char[] separator = {' '};

string[] mas = line.Split(separator,

StringSplitOptions.RemoveEmptyEntries);

MyArray[i] = new int[mas.Length];

for (int j = 0; j < MyArray[i].Length; j++)

{

MyArray[i][j] = int.Parse(mas[j]);

}

}

Console.WriteLine("Введен массив:");

Print(MyArray);

Console.ReadLine();

}

 

static void Print(int[][] mas)

{

for (int i = 0; i < mas.Length; i++)

{

foreach (int x in mas[i])

{

Console.Write("{0} ", x);

}

Console.WriteLine();

}

}

}

Тип string является неизменяемым (immutable) типом данных, т.е. созданную однажды строку нельзя сделать длиннее или короче, в ней нельзя изменить ни одного символа. Таким образом, методы и операции, модифицирующие содержимое строк, на самом деле создают новые строки, копируя при необходимости содержимое старых. Указанная специфика класса string делает его часто неэффективным при выполнении повторяющихся модификаций. Однако наличие постоянных строк имеет и определенные преимущества. Например, благодаря неизменяемости строк при работе с ними отпадает проблема синхронизации потоков. Кроме того, если строки идентичны, в CLR существет возможность нескольким ссылкам string указывать на один, а не на несколько разных строковых объектов (интернирование строк, string interning), что позволяет уменьшить расход памяти.

http://msdn.microsoft.com/ru-ru/library/system.string.aspx

http://msdn.microsoft.com/ru-ru/library/362314fe.aspx






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных