logo
CSharp_Prog_Guide

Использование строк

Строка в C# — это массив знаков, объявленный с помощью ключевого слова string. Строковый литерал объявляется с помощью кавычек, как показано в следующем примере.

string s = "Hello, World!";

Можно извлекать подстроки и объединять строки, как показано в следующем примере.

--

Строковые объекты являются неизменяемыми: после создания их нельзя изменить. Методы, работающие со строками, возвращают новые строковые объекты. В предыдущем примере, когда содержимое строк s1 и s2 объединяется в одну строку, две строки, содержащие текст "orange" и "red", не изменяются. Оператор += создает новую строку с объединенным содержимым. В результате s1 ссылается на совершенно новую строку. Строка, которая содержит слово "orange", по-прежнему существует, но на нее уже нет ссылки после объединения s1.

Примечание.

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

string s1 = "Hello";

string s2 = s1;

s1 += " and goodbye.";

Console.WriteLine(s2); //outputs "Hello"

Because modifications to strings involve creating new string objects, for performance reasons, large amounts of concatenation or other involved string manipulation should be performed with the StringBuilder class, as in the following example:

System.Text.StringBuilder sb = new System.Text.StringBuilder();

sb.Append("one ");

sb.Append("two ");

sb.Append("three");

string str = sb.ToString();

System.Console.WriteLine(str);

// Outputs: one two three

Working with Strings

Escape Characters

Escape characters such as "\n" (new line) and "\t" (tab) can be included in strings. The line:

string hello = "Hello\nWorld!";

is the same as:

Hello

World!

If you want to include a backward slash, it must be preceded with another backward slash. The following string:

string filePath = "\\\\My Documents\\";

is actually the same as:

\\My Documents\

Поскольку при изменениях строк создаются новые строковые объекты, то, в целях повышения производительности, большие объемы работы со строками (включая их объединение и другие операции) следует выполнять в классе StringBuilder, как показано в следующем примере.

System.Text.StringBuilder sb = new System.Text.StringBuilder();

sb.Append("one ");

sb.Append("two ");

sb.Append("three");

string str = sb.ToString();

System.Console.WriteLine(str);

// Outputs: one two three