Строковый тип данных string (класс String) — КиберПедия 

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Строковый тип данных string (класс String)

2021-04-18 86
Строковый тип данных string (класс String) 0.00 из 5.00 0 оценок
Заказать работу

Работу со строками символов в.NET очень удобно осуществлять с помощью типа данных String из пространства имен System. Переменные этого типа можно описывать также с помощью ключевого слова string.

Переменная строкового типа может получить свое значение несколькими способами:

1. Присваиванием строковой константы или строкового выражения:

String name;

name=”John”;

name=”Mr. ” + name; //для строк + действует как конкатенация

2. Путем ввода с клавиатуры

name=Console.Readline();

Сравнивать строки можно операциями == (равно) и!= (не равно). При этом проверяется точное совпадение содержимого этих строк. Однако применять для сравнения операции <, >, >= и <= нельзя. Для таких сравнений существует специальный метод Compare в классе String.

В C# сохранилась возможность работать со строкой как с массивом символов.

В следующем фрагменте программы проиллюстрированы некоторые из перечисленных возможностей:

string s1,s2;

s1 = Console.ReadLine().ToLower();

s2 = ""; //строка может быть пустой

for (int i = 0; i < s1.Length; i++) s2 += s1[s1.Length-i-1];

Console.WriteLine(s2);

Здесь сначала описываются две строковые переменные s1 и s2. Далее с помощью метода ToLower вводимая с клавиатуры строка переводится в нижний регистр и результат присваивается переменной s1. Обратите внимание на цепочку вызовов методов Console.ReadLine().ToLower(). Сначала ReadLine возвращает строку, а затем ToLower переводит ее в нижний регистр.

Далее выполняется цикл, переворачивающий содержимое строки s1. Перевернутое содержимое оказывается в строке s2. Обратите внимание на то, что для определения длины строки используется Length. Вы не видите спика параметров в круглых скобках после Length. Это значит, что Length не является методом, а свойством класса. Позже мы обсудим свойства подробнее.

Обращение к символам строки с помощью индексации возможно только для чтения. Попытка изменить строку с помощью индексации приводит к ошибке компиляции:

s[0]=’!’; //Ошибка

 Класс String предлагает обширный набор полезных методов. В следующей таблице указаны некоторые из них.

Таблица членов класса String

Член Описание
Length  Свойство, возвращающее длину текущей строки
Compare() и CompareTo() Методы, сравнивающие два заданных объекта String и возвращающие целое число (0,1,-1), которое показывает их связь друг с другом в порядке сортировки
Contains() Метод, применяемый для выяснения того, содержит ли текущий строковый объект данную строку
Copy() Метод, создающий новый экземпляр String, имеющий то же значение, что и заданный экземпляр String
CopyTo() Метод, копирующий заданное число знаков начиная с указанной позиции в этом экземпляре до указанной позиции в массиве знаков Юникода
EndsWith() и StartsWith() Методы, определяющие, совпадает ли конец (начало) экземпляра String с указанной строкой
Format() Метод, который заменяет каждый элемент формата в указанном объекте String текстовым эквивалентом значения соответствующего объекта
IndexOf() Метод, возвращающий индекс первого вхождения String или одного или нескольких знаков в данной строке
IndexOfAny() Метод, возвращающий индекс первого обнаруженного в данном экземпляре знака из указанного массива знаков Юникода
Insert() Метод, используемый для получения копии текущей строки, содержащей добавляемые строковые данные
Join() Метод, который вставляет заданный разделитель типа String между элементами заданного массива String, создавая одну сцепленную строку
LastIndexOf() Возвращает индекс последнего вхождения указанного знака Юникода или String в пределах данного экземпляра
LastIndexOfAny() Возвращает индекс последнего вхождения в данном экземпляре какого-либо одного или нескольких знаков, указанных в массиве знаков Юникод
PadLeft() и PadRight() Выравнивает знаки в данном экземпляре по левому (правому) краю, добавляя справа (слева) пробелы или указанные знаки Юникода до указанной общей длины
Remove() Replace() Методы, используемые для получения копии строки с соответствующими модификациями (при удалении или замене символов)
Split() Возвращает строковый массив, содержащий подстроки данного экземпляра, разделенные элементами заданной строки или массива знаков Юникода
Substring() Метод, возвращающий строку, которая представляет подстроку текущей отроки
ToCharArray() Метод, возвращающий массив символов, из которых состоит текущая строка
ToUpper() ToLower() Методы, создающие копию данной строки, представленную символами в верхнем или, соответственно, нижнем регистре
Trim() Удаляет все начальные и конечные вхождения заданных наборов знаков из текущего объекта String
TrimEnd() и TrimStart() Удаляет все конечные (начальные) вхождения набора знаков, заданного в виде массива, из текущего объекта String

 

Рассмотрим подробнее использование некоторых методов класса String.

Метод Split

Английское слово split означает «разбить на части». Одним вызовом этого метода можно решить популярную задачу разбиения текста на некоторые фрагменты.

Рассмотрим следующую постановку задачи:

Дан некоторый текст. Определить среднюю длину всех слов, содержащихся в этом тексте. Слова отделяются друг от друга одним или несколькими символами-разделителями, в число которых входят пробел, запятая и точка.

Очевидно, что для решения этой задачи нужно выделять в тексте отдельные слова. Это достаточно сложный циклический процесс, поскольку слова отделяются друг от друга множеством разных символов-разделителей. Именно эту задачу решает метод Split.

Исходную строку можно получить путём ввода с клавиатуры.

string text = Console.ReadLine();

Для успешной работы методу Split нужно передать параметр – массив символов-разделителей.

char[] separators = new char[] {' ', ',', '.'};

(читатели, знакомые с массивами в языке С++ заметят, что описание и инициализация массивов в C# выглядит несколько иначе; об этом подробнее будет рассказано далее).

Метод Split в результате своей работы возвращает массив строк, полученных в результате выделения их из всего текста на основе информации о символах-разделителях.

string[] words = text.Split(separators);

Вот и всё! Однако, в этой короткой строчке содержится очень важное новшество, непосредственно относящее к объектно-ориентированному программированию. Метод Split вызывается в форме text.Split(…),  то есть метод Split как будто принадлежит строковой переменной text. Это действительно правильная точка зрения, которую Вы должны усвоить в ходе этого курса. Будьте внимательны, поскольку некоторые методы  класса String вызываются «от имени» класса, например, String.Format(…). Такие методы называются статическими. Методы, подобные Split называются нестатическими или методами экземпляра класса.

Теперь, имея массив слов текста легко окончательно решить задачу – найти среднюю длину всех слов. Для этого будет использован стандартный циклический алгоритм суммирования.

int L = 0;

for(int i = 0; i<words.Length; i++) L += words[i].Length;

double aL = Convert.ToDouble(L) / words.Length;

 Здесь мы видим, что по своей форме цикл for в C# такой же, как и в С++. Новшеством является удобная возможность задать границу цикла (количество элементов массива!) с помощью свойства Length массива words, то есть массив сам содержит информацию о своём размере. Аналогично можно определить и длину (количество символов) одной строки: words[i].Length. Приведение Convert.ToDouble понадобилось для того, чтобы операция «деления» выдала вещественный, а не целый результат.

В C# имеется возможность несколько улучшить последний цикл, используя новую разновидность оператора цикла – foreach.

foreach(string w in words) L += w.Length;

Для читателя, знающего английский язык, этот цикл выглядит очень естественно, поскольку хорошо «переводится» на «человеческий» язык. В переводе на русский это звучит примерно так: «Для каждой строки w из words выполнить некоторое действие». Формальный синтаксис этого оператора следующий:

foreach ( <тип> <переменная> in <массив> ) <тело цикла>;

Далее Вы узнаете, что кроме массивов в цикле foreach можно использовать и другие «контейнерные» типы.

Несмотря на правильную структуру, эта программа выдаёт неверный результат. Причина этого станет понятнее, если в цикл добавить вывод слов на экран.

foreach(…) { Console.WriteLine(w); L += w.Length; }

Выполнение программы с входной строкой " yes, no hello." покажет, что метод Split разбил эту строку не на три, а на шесть строк: пустая строка, “yes”, пустая строка, “no”,“hello”, пустая строка. Это произошло потому, что метод Split считает «словом» любую строку, расположенную между символами-разделителями. Чтобы избавиться от этой проблемы можно «заставить» метод Split работать несколько иначе – не выделять в качестве «слов» пустые строки между соседними символами-разделителями. Для этого в метод Split нужно передать дополнительный параметр - StringSplitOptions.RemoveEmptyEntries. Теперь вызов метода выглядит так:

string[] words=

 text.Split(separators, StringSplitOptions.RemoveEmptyEntries);

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

Ещё больший интерес представляет форма записи и тип этого параметра. Тип параметра является перечислением (подробнее об этом в следующем параграфе).


Поделиться с друзьями:

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.018 с.