![]() ТОР 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 с указанием индекса символа в строке.
Помимо перечисленных выше статических методов, у типа с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 обладает богатым набором методов для сравнения строк, поиска в строке и других действий со строками, представленных свойствами, статическими и экземплярными методами. В следующей таблице приведены основные методы для работы со строками.
Следующий фрагмент кода показывает использование методов разделения строки на элементы 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 Не нашли, что искали? Воспользуйтесь поиском:
|