Хелпикс

Главная

Контакты

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





Примечание



Примечание

Во время компиляции буквальные строки преобразуются в обычные строки со всеми теми же escape-последовательностями. Поэтому, если в окне отладчика просматривается буквальная строка, будут видны escape-символы, добавленные компилятором, а не буквальная версия из исходного кода. Например, буквальная строка @"C:\files.txt" в окне отладчика будет выглядеть как "C:\\files.txt".

Строки форматов

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

C#

 

class FormatString

{

static void Main()

{

   // Get user input.

   System.Console.WriteLine("Enter a number");

   string input = System.Console.ReadLine();

 

   // Convert the input string to an int.

   int j;

   System.Int32.TryParse(input, out j);

 

   // Write a different string each iteration.

   string s;

   for (int i = 0; i < 10; i++)

   {

       // A simple format string with no alignment formatting.

       s = System.String.Format("{0} times {1} = {2}", i, j, (i * j));

       System.Console.WriteLine(s);

   }

 

   //Keep the console window open in debug mode.

   System.Console.ReadKey();

}

}

 

 

Одна перегрузка метода WriteLine в качестве параметра принимает строку формата. Поэтому можно просто внедрить строковый литерал формата без явного вызова метода. Но если используется метод WriteLine для отображения вывода отладочных данных в окно Вывод среды Visual Studio, необходимо явно вызвать метод Format, поскольку WriteLine принимает только строку, а не строку формата. Дополнительные сведения о строках форматах см. в разделе Типы форматирования.

Подстроки

Подстрокой является последовательность символов, содержащихся в строке. Метод Substring используется для создания новой строки на основании части исходной строки. Одно или несколько вхождений подстроки можно найти с использованием метода IndexOf. Метод Replace используется для замены всех вхождений заданной подстроки новой строкой. Так же, как и метод Substring, метод Replace фактически возвращает новую строку и не изменяет исходную строку. Дополнительные сведения см. в разделах Практическое руководство. Поиск строк с помощью строковых методов (Руководство по программированию в C#) и Практическое руководство. Изменение содержимого строки (Руководство по программированию в C#).

C#

 

string s3 = "Visual C# Express";

System.Console.WriteLine(s3.Substring(7, 2));

// Output: "C#"

 

System.Console.WriteLine(s3.Replace("C#", "Basic"));

// Output: "Visual Basic Express"

 

// Index values are zero-based

int index = s3.IndexOf("C");

// index = 7

 

 

Доступ к отдельным знакам

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

C#

 

string s5 = "Printing backwards";

 

for (int i = 0; i < s5.Length; i++)

{

System.Console.Write(s5[s5.Length - i - 1]);

}

// Output: "sdrawkcab gnitnirP"

 

 

Если методы String не предоставляют функциональных возможностей, которые необходимы для изменения отдельных символов в строке, можно использовать объект StringBuilder, чтобы изменить отдельные символы "на месте", а затем создать новую строку для сохранения результатов с использованием методов StringBuilder. В следующем примере предположим, что необходимо изменить исходную строку определенным образом, а затем сохранить результаты для дальнейшего использования.

C#

 

string question = "hOW DOES mICROSOFT wORD DEAL WITH THE cAPS lOCK KEY?";

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

 

for (int j = 0; j < sb.Length; j++)

{

if (System.Char.IsLower(sb[j]) == true)

   sb[j] = System.Char.ToUpper(sb[j]);

else if (System.Char.IsUpper(sb[j]) == true)

   sb[j] = System.Char.ToLower(sb[j]);

}

// Store the new string.

string corrected = sb.ToString();

System.Console.WriteLine(corrected);

// Output: How does Microsoft Word deal with the Caps Lock key?           

 

 

Строки с нулевыми значениями и пустые строки

Пустая строка — это экземпляр объекта System.String, содержащий 0 знаков. Пустые строки часто используются в различных сценариях программирования, представляя пустое текстовое поле. Для пустых строк можно вызывать методы, потому что такие строки являются допустимыми объектами System.String. Пустые строки инициализируются следующим образом:

string s = String.Empty;

Строки со значениями null (с нулевыми значениями), напротив, не ссылаются на экземпляр объекта System.String, любая попытка вызвать метод строки со значением null приведет к ошибке NullReferenceException. Однако такие строки можно использовать в операциях объединения и сравнения с другими строками. В следующих примерах показаны некоторые случаи, в которых ссылка на строку со значением null вызывает либо не вызывает исключение:

C#

 

static void Main()

{

string str = "hello";

string nullStr = null;

string emptyStr = String.Empty;

 

string tempStr = str + nullStr;

// Output of the following line: hello

Console.WriteLine(tempStr);

 

bool b = (emptyStr == nullStr);

// Output of the following line: False

Console.WriteLine(b);

 

// The following line creates a new empty string.

string newStr = emptyStr + nullStr;

 

// Null strings and empty strings behave differently. The following

// two lines display 0.

Console.WriteLine(emptyStr.Length);

Console.WriteLine(newStr.Length);

// The following line raises a NullReferenceException.

//Console.WriteLine(nullStr.Length);

 

// The null character can be displayed and counted, like other chars.

string s1 = "\x0" + "abc";

string s2 = "abc" + "\x0";

// Output of the following line: * abc*

Console.WriteLine("*" + s1 + "*");

// Output of the following line: *abc *

Console.WriteLine("*" + s2 + "*");

// Output of the following line: 4

Console.WriteLine(s2.Length);

}

 

 

Использование StringBuilder для быстрого создания строк

Операции со строками в .NET в высокой степени оптимизированы и в большинстве случаев значительно не снижают производительность. Однако в некоторых случаях, например, в непрерывных циклах, выполняющихся сотни и тысячи раз, операции со строками могут влиять на производительность. Класс StringBuilder создает строковый буфер, который позволяет повысить производительность, если в программе обрабатывается много строк. Класс StringBuilder также позволяет заново присваивать отдельные знаки, что не поддерживается встроенным строковым типом данных. Например, данный код заменяет содержимое строки без создания новой строки:

C#

 

System.Text.StringBuilder sb = new System.Text.StringBuilder("Rat: the ideal pet");

sb[0] = 'C';

System.Console.WriteLine(sb.ToString());

System.Console.ReadLine();

 

//Outputs Cat: the ideal pet

 

 

В этом примере объект StringBuilder используется для создания строки из набора числовых типов:

C#

 

class TestStringBuilder

{

static void Main()

{

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

 

   // Create a string composed of numbers 0 - 9

   for (int i = 0; i < 10; i++)

   {

       sb.Append(i.ToString());

   }

   System.Console.WriteLine(sb); // displays 0123456789

 

   // Copy one character of the string (not possible with a System.String)

   sb[0] = sb[9];

 

     System.Console.WriteLine(sb); // displays 9123456789

}

}

 

 

Строки, методы расширения и LINQ

Поскольку тип String реализует IEnumerable<T>, можно использовать методы расширения, определенные в классе Enumerable на строках. Чтобы избежать загромождения рабочего пространства, эти методы исключены из IntelliSense для типа String, но тем не менее, они доступны. Можно также использовать выражения запросов LINQ на строках. Дополнительные сведения см. в разделе LINQ и строки.

 



  

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