
- •Глава 8. Строки - объекты класса string
- •8.1. Строковые литералы
- •8.2. Строковые объекты и ссылки типа string
- •8.3. Операции над строками
- •8.4. Некоторые методы и свойства класса String
- •8.5. Форматирование строк
- •8.7. Применение строк в переключателях
- •8.8. Массивы строк
- •8.8. Сравнение строк
- •8.9. Преобразования с участием строкового типа
- •8.10. Аргументы функции Main()
8.7. Применение строк в переключателях
Мы уже упоминали, что объекты класса string (и ссылки на них) могут использоваться в метках переключателя и служить значением переключающего выражения. Для иллюстрации этих возможностей рассмотрим схему решения такой задачи: "Ввести фамилию человека (например, служащего компании) и вывести имеющиеся сведения о нём". Характер этих сведений и конкретные сведения нам не важны - покажем общую схему решения подобных задач с использованием переключателя и строк.
Console.Write("Введите фамилию: ");
string name = Console.ReadLine();
switch (name)
{
case "Сергеев": Console.WriteLine("Фрол Петрович");
// ...Вывод данных о Сергееве ...
break;
case "Туров":
//...Вывод данных о Турове ...
break;
default:
Console.Write("Нет сведений");
break;
}
8.8. Массивы строк
Как любые объекты, строки можно объединять в массивы. Хотя внимательный читатель заметит, что в массив помещаются не строки, а только ссылки на них, но при использовании массивов ссылок на строки не требуются никакие специальные операции для организации обращения к собственно строкам через ссылки на них. Поэтому в литературе, посвященной языку С#, зачастую говорят просто о массивах строк. В следующей программе создаётся массив ссылок на строки, по умолчанию инициализированный пустыми строками. Затем в цикле элементам массива (ссылкам) присваиваются значения ссылок на объекты-строки разной длины. Далее к массиву применяется оператор перебора контейнеров foreach, и строки выводятся на консоль.
// 08_01.cs - массивы строк
string [] stAr = new string[4];
for (int i = 0; i < stAr.Length; i++)
stAr[i] = new string('*', i + 1);
foreach (string rs in stAr)
Console.Write("\t" + rs);
Результат выполнения программы:
* ** *** ****
В программе создан массив из четырёх пустых строк. Он представлен ссылкой stAr. Обратите внимание, что для создания объектов, адресуемых элементами массива, применяется конструктор с прототипом string (char, int); Этот конструктор создаёт строку в виде последовательности одинаковых символов, количество которых определяет второй параметр. (Первый параметр позволяет задать повторяемый символ.) Итерационная переменная цикла foreach имеет тип string, так как просматриваемым контейнером служит массив типа string[ ].
Для иллюстрации применения методов Split(), Join(), рассмотрим следующую задачу. Пусть значением строки является предложение, слова которого разделены пробелами. Требуется заменить каждый пробел последовательностью символов "-:-". Следующая программа решает сформулированную задачу.
// 08_02.cs - декомпозиция и объединение строк.
string sent = "De gustibus non est disputandum"; // о вкусах не спорят
string[] words; //ссылка на массив строк
words = sent.Split(' ');
Console.WriteLine("word.Length = " + words.Length);
foreach (string st in words)
Console.Write("{0}\t", st);
sent = string.Join("-:-", words);
Console.WriteLine("\n" + sent);
Результат выполнения программы:
word. Length = 5
De gustibus non est disputandum
De-:-gustibus-:-non-:-est-:-disputandum
В строке, связанной со ссылкой sent, помещены слова, разделённые пробелами. Определена ссылка words на массив строк (объектов класса string). Обращение sent.SplitC ') "разбивает" строку, адресованную ссылкой sent, на фрагменты. Признак разбиения - символ пробел ' ', использованный в качестве аргумента. Из выделенных фрагментов формируется массив (объект класса string[]), и ссылка на него присваивается переменной words.
Выражение word.Length равно длине (количеству элементов) сформированного массива. Напомним, что Length - свойство класса массивов string[], унаследованное от базового класса Array.
Оператор foreach перебирает элементы массива words, и итерационная переменная st последовательно принимает значения каждого из них. (Напомним, что особенность итерационной переменной состоит в том, что она позволяет только получать, но не позволяет изменять значения перебираемых элементов.) В теле цикла foreach один оператор - обращение к статическому методу Write() класса Console. Его выполнение обеспечивает вывод значений элементов массива (строк). Эскейп-последовательность '\t' в поле подстановки разделяет табуляцией выводимые слова.
Статический метод Join() предназначен для выполнения действий в некотором смысле обратных действиям метода Split(). Обращение string Join("-:-", words) объединяет (конкатенирует) строки массива, представленного ссылкой words, то есть соединяет в одну строку слова исходного предложения. Между словами вставляется строка, использованная в качестве первого аргумента метода Join(). Тем самым каждый пробел между словами исходной строки заменяется строкой "-:-".