
- •Глава 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. Строки - объекты класса string
8.1. Строковые литералы
Для представления текстовой информации в С# используются объекты класса string. Класс string представляет собой один из предопределённых типов языка С#. В .Net Framework этому типу соответствует класс System.String. Один из видов объектов класса string мы уже многократно применяли - это строковые константы или строковые литералы.
Строковая константа или строковый литерал имеет две формы - обычный (регулярный1) строковый литерал (regular-string-literal) и буквальный строковый литерал (verbatim-string-literal). До сих пор мы использовали только обычную (регулярную) форму, традиционную для языков программирования. Регулярный строковый литерал - это последовательность символов и эскейп-последовательностей, заключенная в кавычки (не в апострофы). В регулярных строковых константах для представления специальных символов используются те же эскейп-последовательности, которые применяются в константах типа char. Обрабатывая регулярный строковый литерал, компилятор из его символов формирует строковый объект и при этом заменяет эскейп-последовательности соответствующими кодами (символов или управляющих кодов). Таким образом, литералу
"\u004F\x4E\u0045\ttwo"
будет соответствовать строка, при выводе которой на экране текст появится в таком виде:
ONE two
Здесь \u004F - юникод символа "О", \х4Е - шестнадцатеричный код символа "N", \u0045 - юникод символа "Е", \t - эскейп-последовательность, представляющая код табуляции.
Буквальный строковый литерал начинается с префикса @, за которым в кавычках размещается возможно пустая последовательность символов. Символы такого литерала воспринимаются буквально, то есть в такой строке не обрабатываются эскейп-последовательности, а каждый символ воспринимается как таковой.
В результате выполнения оператора:
Console. WriteLine(@"\u004F\x4E\u0045\ttwo");
на экране появится
\u004F\x4E\u0045\ttwo
Если в буквальном литерале необходимо поместить кавычку, то она изображается двумя рядом стоящими кавычками.
8.2. Строковые объекты и ссылки типа string
Каждый строковый литерал это объект класса string. Класс string является типом ссылок. Кроме литералов можно определить объекты класса string с использованием конструкторов. (Конструктор - специальный методкласса, предназначенный для инициализации объекта класса в процессе его создания.) Конструкторы класса string позволяют инициализировать объекты-строки несколькими способами.
Наиболее простая форма создания строки-объекта - применение строкового литерала в качестве инициализирующего выражения. Пример:
string line1 = "Это строка 1";
После выполнения этого объявления создаётся ссылка типа string line1 и она ассоциируется со строковым литералом, который является объектом класса string.
Строковый объект можно создавать, используя массив символов:
char [] c_ar ={'М', 'а', 'с', 'с', 'и', 'в'};
string line2 = new string(c_ar);
В данном примере определён символьный массив. Представляющая его ссылка саг используется в качестве аргумента при обращении к конструктору класса string. Значением создаваемого объекта будет строка "Массив". Чтобы получить строку, содержащую один символ, используется конструктор с параметром типа char. Пример:
string line3 = new string('W', 1);
lineЗ представляет строку 'W'.
Если нужна строка, содержащая последовательность одинаковых символов, то применяется конструктор с двумя параметрами. Первый из них определяет нужный символ, а второй - число его повторений. Пример:
string line4 = new string('1', 3);
В данном случае line4 это ссылка на строку "111".
Второй параметр может быть любым целочисленным выражением, поэтому этот конструктор удобно применять в тех случаях, когда количество повторений символа заранее неизвестно, то есть зависит от каких-то изменяемых при выполнении программы данных.
Обратите внимание, что среди конструкторов класса string нет конструктора с параметром типа string.
Строковые объекты, как создаваемые с применением конструкторов, так и формируемые для представления строковых литералов, компилятор размещает в куче. Ссылки на строки размещаются в стеке. Размер строки при определении строкового объекта явно не указывается, он определяется автоматически при инициализации. Ни размер строки, ни её содержимое не могут изменяться после создания строки!!!
Если инициализация при объявлении строковой ссылки отсутствует, то ей присваивается значение null, и ее нельзя использовать в выражениях до присваивания ей конкретного значения. Пример ошибки:
string line;
line += "asdfg"; // ошибка компиляции
Кроме явного задания строковых литералов и применения конструкторов для создания строковых объектов используют метод ToString(). Этот метод определён для всех встроенных типов. Например, значением выражения
242.ToString()
будет строковый объект, содержащий изображение символов целого числа "242".
После выполнения операторов
bool b = 5 > 4;
Console.WriteLine(b.ToString());
значением b будет строка "True".