На этом шаге мы рассмотрим некоторые операции с такими объектами.
При выполнении базовых операций с текстовыми значениями полезно помнить, что на базовом уровне текст реализуется как символьный массив (правда, еще нужно уметь добраться до этого массива). В этом смысле некоторые методы работы с текстовыми объектами неожиданными не станут. Например, узнать количество символов в тексте можно с помощью свойства Length. Скажем, если txt - объектная переменная класса String, то значением выражения txt.Length является количество символов в тексте, содержащемся в объекте, на который ссылается переменная txt. Причем поскольку текстовые литералы реализуются в виде объектов класса String, то свойство Length есть и у текстовых литералов. Поэтому выражение "текст".Length имеет смысл. Значение этого выражения равно 5 - это количество символов в тексте "текст". Если нам нужен отдельный символ из текста, то мы можем проиндексировать текст: после текстовой переменной или текстового литерала в квадратных скобках указывается индекс символа. Как и в случае с одномерным массивом, индексация начинается с нуля. То есть индекс первого символа в тексте равен 0, а индекс последнего символа в тексте на единицу меньше количества символов в тексте. Так, если txt является текстовой переменной, то значением выражения txt[0] является первый символ в тексте, значением выражения txt[1] является второй символ в тексте, а значением выражения txt[txt.Length-1] является последний символ в тексте.
Индексировать можно и текстовые литералы. Так, значением выражения "текст"[2] является символ 'к' - третья по счету (с индексом 2) буква в тексте "текст". Пример операций, связанных с индексированием текстовых значений и перебором символов в тексте, представлен в программе ниже.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pr96_1 { class Program { static void Main() { // Отображение текстового литерала с помощью // цикла по коллекции: foreach (char s in "Текст") { Console.Write(s + " "); } // Переход к новой строке: Console.WriteLine(); // Отображение текстового литерала с помощью // конструкции цикла: for (int k = 0; k < "Текст".Length; k++) { Console.Write("Текст"[k] + "_"); } // Переход к новой строке: Console.WriteLine(); // Текстовая переменная: String A = "Изучаем С#"; // Отображение текстового значения: for (int k = 0; k < A.Length; k++) { Console.Write(A[k]); } // Переход к новой строке: Console.WriteLine(); // Отображение текста в обратном порядке: showReversed(A); // Проверка значения текстового объекта: Console.WriteLine(A); // Новый текстовый объект (текст в обратном порядке): String B = getReversed(A); // Отображение текстового значения: Console.WriteLine(B); // Задержка: Console.ReadLine(); } // Статический метод для создания текстового объекта, // в котором текст записан в обратном порядке: static String getReversed(String txt) { // Локальная текстовая переменная: String str = ""; // Формирование текстовой строки: foreach (char s in txt) { // Добавление символа в начало строки: str = s + str; } // Результат метода: return str; } // Статический метод для отображения текста // в обратном порядке: static void showReversed(String txt) { // Перебор симзолов в тексте (в обратном порядке): for (int k = txt.Length - 1; k >= 0; k--) { // Отображение в консоли символа: Console.Write(txt[k]); } // Переход к новой строке: Console.WriteLine(); } } }
Результат выполнения программы будет таким.
Рис.1. Результат выполнения программы
В главном методе программы с помощью конструкции цикла по коллекции foreach посимвольно отображается текстовый литерал "Текст". Переменная s, объявленная в цикле, относится к типу char (символ из текста). При отображении символов из литерала после каждого символа добавляется пробел.
Еще один пример посимвольного отображения литерала основан на использовании конструкции цикла for. Символы в тексте (речь идет о текстовом литерале "Текст") в этом случае перебираются с использованием индекса. Индексная переменная k пробегает значения от 0 и до верхней границы, которая на единицу меньше количества символов в текстовом литерале. Длину текстового литерала (количество символов) вычисляем с помощью выражения "Текст".Length. Отдельный символ в литерале вычисляется инструкцией "Текст"[k]. В данном случае после текстового литерала мы просто указали в квадратных скобках индекс символа. При отображении символов в консоли после каждого символа добавляется подчеркивание.
Командой
String A = "Изучаем С#";
Console.WriteLine(A);
В программе описано два статических метода. Метод showReversed() при вызове отображает в консоли в обратном порядке текстовую строку, переданную аргументом методу. Поэтому при выполнении команды
showReversed (А)
Console.Write(txt[k])
При вызове метода getReversed() создается новый текстовый объект. Текст в этом объекте записан в обратном порядке по сравнению с объектом, который передавался аргументом методу при вызове. Следовательно, когда выполняется команда
String B = getReversed(A); ,
str = s + str;
На следующем шаге мы закончим изучение этого вопроса.