Хелпикс

Главная

Контакты

Случайная статья





Строки (Руководство по программированию на C#)



Строки (Руководство по программированию на C#)

Строка является объектом типа String, значением которого является текст. По сути, текст хранится в виде последовательной доступной только для чтения коллекции объектов Char. В конце строки на языке C# отсутствует символ, заканчивающийся на NULL; поэтому строка C# может содержать любое число внедренных символов NULL ("\0"). Свойство Length строки представляет число объектов Char, содержащихся в этой строке, а не число символов Юникода. Для доступа к отдельным точкам в строке кода Юникода используется объект StringInfo object.

string илиSystem.String

В C# ключевое слово string является псевдонимом свойства String. Поэтому String и string эквивалентны, и пользователи могут использовать любое наиболее предпочтительное для них соглашение по наименованию. Класс String предоставляет множество методов для безопасного создания, обработки и сравнения строк. Кроме того, язык C# перегружает некоторые операторы для упрощения наиболее употребительных операций со строками. Дополнительные сведения о ключевом слове см. в разделе string (Справочник по C#). Дополнительные сведения о типе и его методах см. в разделе String.

Объявление и инициализация строк

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

C#

 

// Declare without initializing.

string message1;

 

// Initialize to null.

string message2 = null;

 

// Initialize as an empty string.

// Use the Empty constant instead of the literal "".

string message3 = System.String.Empty;

 

//Initialize with a regular string literal.

string oldPath = "c:\\Program Files\\Microsoft Visual Studio 8.0";

 

// Initialize with a verbatim string literal.

string newPath = @"c:\Program Files\Microsoft Visual Studio 9.0";

 

// Use System.String if you prefer.

System.String greeting = "Hello World!";

 

// In local variables (i.e. within a method body)

// you can use implicit typing.

var temp = "I'm still a strongly-typed System.String!";

 

// Use a const string to prevent 'message4' from

// being used to store another string value.

const string message4 = "You can't get rid of me!";

 

// Use the String constructor only when creating

// a string from a char*, char[], or sbyte*. See

// System.String documentation for details.

char[] letters = { 'A', 'B', 'C' };

string alphabet = new string(letters);

 

 

Обратите внимание, что для создания строкового объекта оператор new не используется, за исключением случаев инициализации строки массивом символов.

Инициализация строки значением константы Empty приводит к созданию нового объекта String, строка которого имеет нулевую длину. Строковый литерал нулевой длины представляется как "". При инициализации строк значением Empty вместо null снижается вероятности возникновения NullReferenceException. Используйте статический метод IsNullOrEmpty(String), чтобы проверить значение строки перед попыткой обращения к ней.

Неизменность строковых объектов

Строковые объекты являются неизменяемыми: после создания их нельзя изменить. Все методы String и операторы C#, которые, как можно было бы представить, изменяют строку, в действительности возвращают результаты в новый строковый объект. В следующем примере, когда содержимое строк s1 и s2 объединяется в одну строку, две исходные строки не изменяются. Оператор += создает новую строку с объединенным содержимым. Этот новый объект присваивается переменной s1, а исходный объект, который был присвоен строке s1, освобождается для сборки мусора, поскольку ни одна переменная не содержит ссылку на него.

C#

 

string s1 = "A string is more ";

string s2 = "than the sum of its chars.";

 

// Concatenate s1 and s2. This actually creates a new

// string object and stores it in s1, releasing the

// reference to the original object.

s1 += s2;

 

System.Console.WriteLine(s1);

// Output: A string is more than the sum of its chars.

 

 

Поскольку "изменением" строки в действительности является созданием новой строки, необходима предосторожность при создании ссылок на строки. Если создать ссылку на строку, а затем "изменить" исходную строку, то ссылка будет по-прежнему указывать на исходный объект, а не на новый объект, который был создан при изменении строки. Это поведение демонстрируется в следующем коде.

C#

 

string s1 = "Hello ";

string s2 = s1;

s1 += "World";

 

System.Console.WriteLine(s2);

//Output: Hello

 

 

Дополнительные сведения о том, как создавать новые строки, основанные на таких изменениях как операции поиска и замены исходной строки, см. в разделе Практическое руководство. Изменение содержимого строки (Руководство по программированию в C#).

Правильные и буквальные строковые литералы

Правильные строковые литералы используются, если нужно внедрить escape-символы, предоставляемые языком C#, как показано в следующем примере.

C#

 

string columns = "Column 1\tColumn 2\tColumn 3";

//Output: Column 1   Column 2   Column 3

 

string rows = "Row 1\r\nRow 2\r\nRow 3";

/* Output:

Row 1

Row 2

Row 3

*/

 

string title = "\"The \u00C6olean Harp\", by Samuel Taylor Coleridge";

//Output: "The Æolean Harp", by Samuel Taylor Coleridge

 

 

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

C#

 

string filePath = @"C:\Users\scoleridge\Documents\";

//Output: C:\Users\scoleridge\Documents\

 

string text = @"My pensive SARA ! thy soft cheek reclined

Thus on mine arm, most soothing sweet it is

To sit beside our Cot,...";

/* Output:

My pensive SARA ! thy soft cheek reclined

Thus on mine arm, most soothing sweet it is

To sit beside our Cot,...

*/

 

string quote = @"Her name was ""Sara.""";

//Output: Her name was "Sara."

 

 

Escape-последовательности строк

Escape-последовательность Имя символа Кодировка Юникода
\' Одинарная кавычка 0x0027
\" Двойная кавычка 0x0022
\\ Обратная косая черта 0x005C
\0 Null 0x0000
\a Звуковой сигнал (звонок) 0x0007
\b Удаление предыдущего символа 0x0008
\f Подача страницы (для перехода к началу следующей страницы) 0x000C
\n Новая строка 0x000A
\r Возврат каретки 0x000D
\t Горизонтальная табуляция 0x0009
\U Escape-последовательность Юникода для пар символов-заместителей. \Unnnnnnnn
\u Escape-последовательность Юникода \u0041 = "A"
\v Вертикальная табуляция 0x000B
\x Escape-последовательность Юникода аналогична "\u", за исключением строк с переменной длиной. \x0041 = "A"


  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.