Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Обращение к отдельным элементам строкиСтр 1 из 2Следующая ⇒
Работа со строками Обработка текстовых строк является одной из важнейших задач на современных компьютерах. В языке C# имеются развитые средства по обработке строк. Ранее мы частично рассматривали работу со строками. Здесь разберёмся с этим вопросом более подробно. Строки в Си-шарп – это объекты класса String, значением которых является текст. Для работы со строками в этом классе определено множество методов (функций) и в этом уроке мы рассмотрим некоторые из них. Чтобы использовать строку, ее нужно сначала создать – присвоить какое-либо значение, иначе мы получим ошибку: "Использование локальной переменной "[имя переменной]", которой не присвоено значение". Объявим простую строку и выведем ее на экран: Для хранения символьной информации в языке C# используется Unicode. Под один символ отводится 16 бит. Строка в C# представляет собой цепочку символов Unicodeи является объектом класса System.String. Создание строки 1)Строку с именем s можно создать так: string s="Это строка"; 2)Строка может содержать различные управляющие символы, например, символ перехода на новую строку '\n': string s1 = "Текст выводится \n в две строки"; Console.WriteLine(s1); 3)Можно создавать строки с посимвольным соответствием — в этом случае управляющие символы в таких строках становятся обычными символами. Запишем перед строкой символ '@' (Эт-коммерческое). string s1 = @"Текст выводится \n в две строки"; Console.WriteLine(s1); Здесь строка выведется на печать «как есть»:
4)Если имеется массив символов Unicode типа char, то его можно преобразовать в строку. Для этого используется конструктор класса String(): char []c={'A','B','C','D','E','F'}; string s=new String(c); Сейчас в s хранится строка: ABCDEF 5)Но можно построить новую строку не из всего массива типа char, а из его части: char []c={'A','B','C','D','E','F'}; int i=2, k=3; s=new String(c, i, k); В этом случае строка строится не из всего массива c, а начиная с элемента под номером i, и используется k символов. Вывод строки s на экран даёт следующее: CDE 6)Можно создать строку, в которой будет многократно повторяться один и тот же символ: string s=new String('*', 10); Получится строка из 10 символов «звёздочка». Замечание. string s = new String("*", 10); работать не будет ("*" — это строка, а '*' — это символ). Консольный ввод-вывод строк Выполняется просто. Достаточно использовать стандартные методы ReadLine() и WriteLine() класса Console: string s; Console.WriteLine("Задайте строку:"); s=Console.ReadLine(); Console.WriteLine("s="+s); Обращение к отдельным элементам строки Если в строке имеется какая-либо информация, то можно эту строку обрабатывать посимвольно как массив. Индексы в строке так же начинаются с 0. Текущая длина определяется свойством Length: int k = 0; string s = "Код Уфы 347, 7 цифр в номере телефона"; for (int i = 0; i < s.Length; i++) if (s[i] >= '0' && s[i] <= '9') k++; Console.WriteLine("В строке: {0} \n число цифр k={1}", s, k); На экран будет выведено количество цифр, найденных в этой строке. Здесь к элементу строки используется доступ по чтению. Если мы попробуем заменить все символы '2' на '5': for(int i = 0; i < s.Length; i++) if(s[i] == '2') s[i] = '5'; Console.WriteLine("s="+s); В этом случае для строки s[i] = '5'; будет выдано сообщение об ошибке: Невозможно присвоить значение свойству или индексатору 'string.this[int]' -- доступ только для чтения (CS0200) Решить проблему можно двумя путями: 1) использовать методы класса String (для замены подойдёт метод Replace()); 2) вместо класса String использовать класс StringBuilder, для которого допустимо изменение отдельных элементов строки (как в массиве). Операции над строками Для строк допустимы операция присваивания, сцепление строк (в конец первой строки добавляется вторая) и проверка на равенство или неравенство. Другие операции не допустимы. 1)Сцепление (слияние) строк: string s1 = "Слияние_", s2 = "строк"; string s; s = s1 + s2; Console.WriteLine(s); Console.ReadKey(); На экран будет выведено: 2)Проверка на равенство (==) или на неравенство (!=): string s1 = "122", s2 = "123"; if (s1 == s2) Console.WriteLine("Равны"); else Console.WriteLine("Неравны"); Console.ReadKey(); Здесь будет напечатано: Методы по обработке строк Для строк в языке C# существует большое количество готовых методов, позволяющие выполнять различные действия над строками. Рассмотрим наиболее употребительные из них. 1)Конкатенация (сцепление, слияние) строк — используется статический метод Concat(): string s = "123", s1 = "45", s2 = "678"; s = String.Concat(s, s1, s2); Console.WriteLine(s); Результатом будет строка, содержащая обе исходные строки: Интересно применение метода Concat() для объединения массива строк: string[] x = { "Один ", "Два ", "Три" }; string s = String.Concat(x); Console.WriteLine(s); Результатом будет строка: 2)Копированиестроки выполняется с помощью статического метода Copy(): string s2 = String.Copy(s); Тоже самое можно получить и с помощью оператора присваивания: s2=s; 3)Получение подстроки— используется метод Substring(), например: string s, s2; s = "Программирование"; s2 = s.Substring(7, 3); Console.WriteLine(s2); Здесь из исходной строки s, начиная с позиции 7(считаем с 0), копируется 3 символа и полученный результат заносится в строку s2. На экране будет выведено: 4)Вставка подстроки — в заданную позицию (2) исходной строки sвключаем подстроку ("AB"): string s, s2; s = "Вставка в строку"; s2 = s.Insert(8, "ПОДСТРОКИ "); Console.WriteLine(s2); Результатом будет строка s2, равная: 5)Замена символов и строк — используется метод Replace(). Имеется два варианта. Рассмотрим их оба. а)Замена символов. Заменим в строке sвсе вхождения символа '2'на '5': string s = "123422"; Console.WriteLine(s); string s1 = s.Replace('2', '5'); Console.WriteLine(s1); Полученный результат: Как видим, рассматриваемая ранее задача (попытка замены s[i]='5') при использовании метода Replace() решается предельно просто. б)Замена строк. Заменим все слова " первоначальная " на " другая": string s = "Это первоначальная строка"; Console.WriteLine(s); string s1 = s.Replace("первоначальная", "другая"); Console.WriteLine(s1); Полученный результат:
Метод Replace() работает корректно даже тогда, когда делается замена на строку, которая является расширением исходной. Например, заменим в тексте все вхождения слова "child" на "children": string s = "child_child_child"; Console.WriteLine(s); string s1 = s.Replace("child", "children"); Console.WriteLine(s1); Как видно из выведенного на экран текста, всё получилось так, как и ожидалось: 6)Удаление символов из строки (метод Remove()) — в строке s удаляем k символов, начиная с позиции i: string s = "Удаляем подстроку из строки"; Console.WriteLine(s); int i = 8, k = 10; string s1 = s.Remove(i, k); Console.WriteLine(s1); Полученный результат: Метод Remove() может применяться обрезания строки, тогда указывается один аргумент – позиция, начиная с которой обрезается строка string s = "Hello, World"; Console.WriteLine(s.Remove(5)); 7)Поиск индекса первого вхождения символа в строке (метод IndexOf()): string s = "It is false"; int i = s.IndexOf('f'); Console.WriteLine("i={0}", i); Полученный результат (позиция символа 'f'): 8)Поиск первого вхождения любого из символов массива в строке (метод IndexOfAny()) — в строке s ищется позиция первого вхождения любого из символов массива x: string s = "От А до Я зная материал, легко получить пятерку"; char[] x = { 'А', 'Я' }; int i = s.IndexOfAny(x); Console.WriteLine("i={0}", i); Полученный результат (позиция символа '{'): i=3 9)Поиск индекса последнего вхождения символа в строке (метод LastIndexOf()): string s = "От А до Я зная материал, легко получить пятерку"; int i = s.LastIndexOf('а'); Console.WriteLine("i={0}", i); Полученный результат: i=21 10)Поиск последнего вхождения любого из символов массива в строке — в строке s ищется позиция последнего вхождения любого из символов массива x (методLastIndexOfAny()): string s = "От А до Я зная материал, легко получить пятерку"; char[] x = { 'а', 'я' }; int i = s.LastIndexOfAny(x); Console.WriteLine("i={0}", i); Полученный результат: i=41 11) Проверка на вхождение подстроки в строку – используется метод Contains(). Данный метод принимает один аргумент – подстроку. Возвращает True, если строка содержит подстроку, в противном случае – False. Пример: string s = "Hello, World"; if (s.Contains("Hello")) Console.WriteLine("Содержит");
13) Метод IndexOf() возвращает индекс первого символа подстроки, которую содержит строка. Данный метод принимает один аргумент – подстроку. Если строка не содержит подстроки, метод возвращает "-1". Пример: string s = "Hello, World"; Console.WriteLine(s.IndexOf("H")); // 0 Console.WriteLine(s.IndexOf("World")); // 7 Console.WriteLine(s.IndexOf("Zoo")); // -1 14) Чтобы узнать, начинается/заканчивается ли строка указанной подстрокой, используются методы StartsWith() и EndsWith(), которые возвращают логическое значение. Пример: string s = "Hello, World"; Console.WriteLine(s.StartsWith("Hello")); // True Console.WriteLine(s.StartsWith("World")); // False Console.WriteLine(s.EndsWith("World")); // True
15) Перевести строку в верхний/нижний регистр можно при помощи методов ToUpper() и ToLower(): string s = "Hello, World"; Console.WriteLine(s); Console.WriteLine(s.ToUpper()); // выводит "HELLO, WORLD" Console.WriteLine(s.ToLower()); // выводит "hello, world"
16) Метод ToCharArray() преобразует строку в массив символов: string s = "Массив"; char[] array = s.ToCharArray(); for (int i = 0; i < s.Length; i++) Console.WriteLine(s[i]); Результат:
17) Метод Split() разбивает строку по указанному символу на массив подстрок, один аргумент - символ, по которому будет разбита строка. string s = "Строка, преобразуется, в, массив, слов"; string[] slovo = s.Split(','); for (int i = 0; i < slovo.Length; i++) Console.WriteLine(slovo[i]); Пример 1. Дана символьная строка s, известно, что в этой строке есть хотя бы один символ «точка». Преобразовать строку, удалив из неё запятые, предшествующие первой точке, и заменив знаком * все символы пробела, встречающиеся после первой точки. Возможная реализация: string s = "Уберем, удалим, изничтожим запятые. Потом заменим пробел подчеркиванием."; Console.WriteLine("Исходная строка:\n" + s); int k = s.IndexOf("."); Console.WriteLine("Первая точка находится в позиции: " + k); string s1 = s.Substring(0, k); Console.WriteLine(s1); int i; do { i = s1.IndexOf(','); if (i >= 0) s1 = s1.Remove(i, 1); } while (i >= 0); Console.WriteLine(s1); string s2 = s.Substring(k); Console.WriteLine(s2); s2 = s2.Replace(' ', '_'); Console.WriteLine(s2); s = s1 + s2; Console.WriteLine("Результирующая строка:\n" + s); Console.Write("Press any key to continue . . . "); Console.ReadKey(true); Результат работы: Строки StringBuilder Кроме обычных строк (тип string) в языке C# существует ещё один вид строк — StringBuilder. Для символов, хранящихся в строках StringBuilder, также используется Unicode. Принципиальное отличие строки StringBuilder от строки string заключается в том, что элементы строки StringBuilder можно изменять напрямую, при этом такая строка заново не создаётся. Для работы со строками StringBuilder необходимо подключить дополнительное пространство имён: using System.Text; |
||
Последнее изменение этой страницы: 2018-05-10; просмотров: 278. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |