Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1447 / 158 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Лекция 20:

Консольные приложения в С#

< Лекция 19 || Лекция 20: 1234567891011

Работа со строками в C#

Встроенный тип string (строки Unicode ) относится к ссылочному типу данных и является псевдонимом класса System.String. Этот базовый класс обеспечивает программиста множеством полезных свойств и методов для обработки строк. Часть методов является методами объектов, часть - методами класса (статическими).

Таблица 20.10 . Некоторые члены класса System.String
Член класса Назначение
Length Это свойство возвращает длину указанной строки
Concat() Этот статический метод возвращает новую строку, склеенную из двух исходных
CompareTo() Сравнивает две строки
Copy() Этот статический метод создает новую копию существующей строки
Format() Используется для форматирования строки с использованием спецификаторов форматирования и подстановочных выражений вида {0}
Insert() Используется для вставки строки внутрь существующей
PadLeft() PadRight() Для заполнения строки слева или справа указанными символами
Remove() Replace() Эти методы позволяют создать копию строки с внесенными изменениями (частично удаленными или замененными символами)
ToUpper() ToLower() Возвращают копию строки с символами в верхнем или нижнем регистре

Для этого типа некоторые операции перегружены так, что позволяют работать со значениями, а не со ссылками. Например, при использовании операторов равенства == или неравенства != происходит сравнение значений строковых объектов, а не адресов этих объектов в оперативной памяти. Оператор сложения + перегружен так, что при его применении к строковым объектам вызывается неявно метод Concat(). Кроме того, можно обратиться к любому символу строки с помощью оператора индекса [].

using System;
  
namespace Test
{
class Test
{
  static void Main()
  {
  string title = "******************
    **************************\n"
    + "\tМетоды класса System.String\n"
    + "************************
    ********************\n";
  Console.WriteLine(title);
  
  // Создаем строку по классу
  System.String strObject = "Это строка-экземпляр 
    класса System.String:";
  string strAlias = "Это строка-экземпляр 
    встроенного псевдонима string:";
  
  // Сравниваем содержимое
  if(strObject == strAlias)
    Console.WriteLine("Строки равны");
  else
    Console.WriteLine("Строки неравны");
  
  // Склеиваем строки
  string addString = strObject + strAlias;
  Console.WriteLine("\nСклеенные строки\n{0}", 
    addString);
  
  // Применяем индексатор для доступа к символам строки
  Console.WriteLine("\nСимволы строки \"
    {0}\"", strAlias);
  for(int i = 0; i < strAlias.Length; i++)
    Console.WriteLine("{0}. {1}", i, 
      "\t" + strAlias[i]);
  
  while(true);
  }
}
}
Листинг 20.43 . Пример работы со строками

Результат выполнения примера

********************************************
  Методы класса System.String
******************************************** 
  
Строки неравны
  
Склеенные строки
Это строка-экземпляр класса System.String:Это строка-экземпляр встроенного псевдонима string:
  
Символы строки "Это строка-экземпляр встроенного псевдонима string:"
0.   Э
1.   т
2.   о
3.
4.   с
5.   т
6.   р
7.   о
8.   к
9.   а
10.   -
11.   э
12.   к
13.   з
14.   е
15.   м
16.   п
17.   л
18.   я
19.   р
20.
21.   в
22.   с
23.   т
24.   р
25.   о
26.   е
27.   н
28.   н
29.   о
30.   г
31.   о
32.
33.   п
34.   с
35.   е
36.   в
37.   д
38.   о
39.   н
40.   и
41.   м
42.   а
43.
44.   s
45.   t
46.   r
47.   i
48.   n
49.   g
50.   :

Управляющие последовательности и вывод служебных символов

В C# строки могут содержать любое количество управляющих последовательностей ( escape characters - управляющих символов), на которые реагируют средства вывода строк.

Таблица 20.11 . Управляющие последовательности
Управляющий символ Назначение
@ Префикс дословного вывода строк ( verbatim strings ). Ставится перед формируемой строкой и отменяет срабатывание всех управляющих символов
\' Вставить одинарную кавычку
\" Вставить двойную кавычку
\\ Вставить обратный слэш
{{ Вставить фигурную открывающую скобку
}} Вставить фигурную закрывающую скобку
\a Запустить системное звуковое оповещение ( Alert )
\b Вернуться на одну позицию ( Backspace )
\f Начать следующую страницу ( Form feed )
\n Вставить новую строку ( New line )
\r Вставить возврат каретки ( carriage Return )
\t Вставить горизонатльный символ табуляции ( horizontal Tab )
\u Вставить символ Unicode
\v Вставить вертикальный символ табуляции ( Vertical tab )
\o Представляет нулевой символ NULL (все биты представления нулевые)
using System;
  
namespace Test
{
class Test
  {
  static void Main()
  {
  // Форматирование без параметров + Звукнем
  string str = String.Format("\aЯ передаю \"
    Привет всем!\" {{Снетков}}\n");
  Console.WriteLine(str);
  
  while(true);
  }
}
}
Листинг 20.44 . Пример с управляющими символами строк

Результат выполнения примера

Я передаю "Привет всем!" {Снетков}

Применение класса System.Text.StringBuilder

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

Когда потребуется не создавать лишние копии строк (особенно для больших объемов данных), а обрабатывать строки напрямую в месте их хранения, можно воспользоваться классом StringBuilder в пространстве имен System.Text.

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

Таблица 20.12 . Свойства, задаваемые через параметры конструкторов StringBuilder при создании объекта
Свойство Назначение
Capacity (емкость) Свойство определяет исходный размер элемента символьного массива в экземпляре класса StringBuilder. По умолчанию принято значение 16. Если существующий размер меньше, чем необходимо для такой операции как добавление, то объект класса StringBuilder удваивает размер символьного массива. Поскольку такие операции снижают производительность, рекомендуется заранее задавать необходимый размер, если он известен на момент создания объекта класса StringBuilder.
Length (длина) Длина строки в данном экземпляре объекта класса StringBuilder.
MaxCapacity (максимальная емкость) Свойство задает максимальное количество символов, которое может содержать текущий экземпляр класса StringBuilder. По умолчанию принято значение Int32.MaxValue. Свойство StringBuilder.MaxCapacity уже созданного объекта не может быть изменено.
Chars (символы) Это индексируемое свойство внутреннего символьного массива, входящего в объект StringBuilder. Индексы этого свойства начинаются с нуля.

Таблица 20.13 . Методы класса StringBuilder
Метод Назначение
Append() Добавляет строковое ( System.String ) представление указанного объекта к содержимому экземпляра класса StringBuilder
AppendFormat() Подобен методу Append(), подразумевает применение спецификаторов форматирования и национальных особенностей.
EnsureCapacity() Гарантирует определенную емкость символьного массива.
Equals() Сранивает два экземпляра класса StringBuilder на совпадение значений всех свойств и содержимого символьного массива.
Insert() Вставляет строковое представление указанного объекта в определенную позицию символьного массива экземпляра StringBuilder
Remove() Удаляет определенный диапазон символов.
Replace() Заменяет в объекте указанные вхождения строк на другие
ToString() Преобразует допускающий изменения экземпляр класса System.Text.StringBuilder в неизменный экземпляр класса System.String
using System; // Для класса String
using System.Text; // Для класса StringBuilder
  
namespace Test
{
  class Test
  {
  static void Main()
  {
  String strFixed = new String(
    "Эта исходная строка не меняется".ToCharArray());
  String strUpper = strFixed.ToUpper();
  Console.WriteLine(strFixed);
  Console.WriteLine(strUpper);// Новая копия
  int capacity = 100; // Исходный размер
  StringBuilder myBuffer = new StringBuilder(
    "\nИсходная строка", capacity);
  myBuffer.Append("+Добавленная строка");
  Console.WriteLine(myBuffer);// Та же строка
  
  Console.ReadLine();
  }
}
}
Листинг 20.45 . Применение класса StringBuilder

Результат выполнения примера

Эта исходная строка не меняется
ЭТА ИСХОДНАЯ СТРОКА НЕ МЕНЯЕТСЯ
  
Исходная строка+Добавленная строка

Перечисления в C#

using System;
  
namespace Test
{
  enum EmpType
  {
  Manager,
  Grunt,
  Contractor,
  VP
  }
  
  class Test
  {
  
  void Variant(EmpType en)
  {
  switch(en)
  {
  case EmpType.Contractor:
    Console.WriteLine("Работает по контракту");
    break;
  case EmpType.Grunt:
    Console.WriteLine("");
    break;
  case EmpType.Manager:
    Console.WriteLine("");
    break;
  case EmpType.VP:
    Console.WriteLine("");
    break;
  default:
    Console.WriteLine("");
               break;        
  }
  }
  
  static void Main()
  {
  Console.ReadLine();
  }
}
}
Листинг 20.46 . Незавершенный пример
< Лекция 19 || Лекция 20: 1234567891011
Максим Филатов
Максим Филатов

Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет:

Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.

 

Как активировать код?