Обучение C#

Формула программиста
основатель — Волосатов Евгений Витольдович

Класс String для работы со строками

Основным типом данных для хранения текстовой информации в языке C# является тип string. Этот тип данных является встроенным и соответствует классу System.String.

Инициализация строк

Для инициализации символьных строк используются строковые литералы, то есть последовательности символов, заключенные в двойные кавычки. Кроме символов строковый литерал может содержать Escape-последовательности – специальные символы, которые начинаются с обратного слеша (\), после которого следует обозначение символа.
Перечень основных Escape-последовательностей приведен в таблице

Escape-последовательностьЗначение
\a Звонок (предупреждение)
\b Удаление предыдущего символа
\f Перевод страницы
\n Новая строка
\r Возврат каретки
\t Горизонтальная табуляция
\v Вертикальная табуляция
\' Одиночная кавычка
\" Двойная кавычка
\\ Обратный слеш
\? Вопросительный знак
\xhhhh Символ Юникода в шестнадцатеричном формате, где hhhh – собственно код символа
\udddd Символ Юникода (dddd)

Escape-последовательности используются, например, для перевода строки или отступа в виде символа табуляции.
Если необходимо задать строку без Escape-последовательностей, то можно применить буквальный строковый литерал, обозначаемый префиксом @, после которого размещается неизменяемая последовательность символов в двойных кавычках. Такой литерал может размещаться в коде на нескольких строчках, и это размещение сохранится при выводе.
Примеры инициализации объектов типа string.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
namespace MyProgram
{
  class Program
  {
    static void Main(string[] args)
    {
      string s1 = "Строка
текста\n";
      string s2 = @"Строка
текста"
;
      string s3 = "\u041f\u0440\u0438\u0432\u0435\u0442";
      string s4 = "\x041f\x0440\x0438\x0432\x0435\x0442";
      string s5 = @"C:\Projects\MyProgram";
      Console.WriteLine(s1);
      Console.WriteLine(s2);
      Console.WriteLine(s3);
      Console.WriteLine(s4);
      Console.WriteLine(s5);
      Console.ReadKey();
    }
  }
}
image articles/514/514_1.png


Кроме того, при формировании строк очень часто используется перегруженный оператор +, который осуществляет слияние строк:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
namespace MyProgram
{
  class Program
  {
    static void Main(string[] args)
    {
      string s1 = "Привет";
      string s2 = "мир";
      string s3 = s1 + " " + s2 + "!";
      Console.WriteLine(s1);
      Console.WriteLine(s2);
      Console.WriteLine(s3);
      Console.ReadKey();
    }
  }
}
image articles/514/514_2.png


Класс string содержит ряд конструкторов для инициализации строк, которые позволяют сформировать строку из массива символов типа char или его части.
Также можно сформировать строку из последовательности одинаковых символов.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
namespace MyProgram
{
  class Program
  {
    static void Main(string[] args)
    {
      char[] m = { 'М', 'а', 'c', 'c', 'и', 'в' };
      string s1 = new string(m);
      string s2 = new string(m, 3, 2);
      string s3 = new string('A', 5);
      Console.WriteLine(s1);
      Console.WriteLine(s2);
      Console.WriteLine(s3);
      Console.ReadKey();
    }
  }
}
image articles/514/514_3.png


Основным свойством любой строки является свойство Length, которое позволяет получить количество символов в строке.

По сути строка представляет собой массив символов, обратиться к каждому из которых можно с использованием индекса этого элемента.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
namespace MyProgram
{
  class Program
  {
    static void Main(string[] args)
    {
      string s1 = "Привет";
      Console.WriteLine(s1);
      for(int i=0; i<s1.Length; i++)
      {
        Console.Write(s1[i] + " ");
      }
     onsole.ReadKey();
    }
  }
}
image articles/514/514_4.png


Кроме того, класс String обладает рядом методов, основные из которых будут рассмотрены ниже.

Сравнение и копирование строк

Метод Compare() является статическим методом класса String и позволяет посимвольно сравнить две строки или подстроки. Возвращаемое значение метода равно 0 в случае равенства строк. Пример использования этого метода:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
namespace MyProgram
{
  class Program
  {
    static void Main(string[] args)
    {
      string s1 = "Привет";
      string s2 = "*ПРИВЕТ мир";
// сравнение двух строк
      Console.WriteLine(string.Compare(s1, s2));
// сравнение 6 символов в двух строках
      Console.WriteLine(string.Compare(s1, 0, s2, 1, 6));
//сравнение 6 символов в двух строках без учета регистра
      Console.WriteLine(string.Compare(s1, 0, s2, 1, 6, true));
      Console.ReadKey();
    }
  }
}
image articles/514/514_5.png


Статический метод Copy() позволяет создать копию строки, указанной в качестве аргумента.
Для проверки, содержат ли строки одинаковые последовательности символов, может использоваться метод Equals(), имеющий как статический, так и нестатический вариант использования. Пример использования методов:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
namespace MyProgram
{
  class Program
  {
    static void Main(string[] args)
    {
      string s1 = "Привет";
      string s2;
      s2 = string.Copy(s1);
      Console.WriteLine(s1.Equals(s2));
      Console.WriteLine(string.Equals(s1,s2));
      s2 += "!";
      Console.WriteLine(s1);
      Console.WriteLine(s2);
      Console.ReadKey();
    }
  }
}
image articles/514/514_6.png


Изменение регистра букв в строке

Для изменения регистра букв, используемых в строке, можно использовать методы ToLower(), приводящие все буквы строки соответственно в верхнему или нижнему регистру.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System;
namespace MyProgram
{
  class Program
  {
    static void Main(string[] args)
    {
      string s1 = "Привет 12345";
      Console.WriteLine(s1);
      Console.WriteLine(s1.ToUpper());
      Console.WriteLine(s1.ToLower());
      Console.ReadKey();
    }
  }
}
image articles/514/514_7.png


Работа с подстрокой в строке

Для формирования подстроки может использоваться метод Substring(), который формирует подстроку начиная с заданной позиции или начиная с заданной позиции указанной длины.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System;
namespace MyProgram
{
  class Program
  {
    static void Main(string[] args)
    {
      string s1 = "Привет мир!";
      Console.WriteLine(s1);
      Console.WriteLine(s1.Substring(7));
      Console.WriteLine(s1.Substring(7,3));
      Console.ReadKey();
    }
  }
}
image articles/514/514_8.png


Кроме того, для работы с подстроками могут использоваться следующие методы:
  • Contains(подстрока) – проверяет, содержит ли данная строка подстроку, указанную в качестве аргумента, возвращает логическое значение true или false.
  • IndexOf(подстрока) – возвращает индекс первого вхождения подстроки в данную строку. Если вхождений нет, возвращается -1.
  • LastIndexOf(подстрока) – возвращает индекс последнего вхождения подстроки в данную строку. Если вхождений нет, возвращается -1.
  • Replace(подстрока1, подстрока2) – заменяет все вхождения подстроки1 подстрокой2.
  • StartsWith(подстрока) – проверяет, совпадает ли начало строки с указанной подстрокой.
  • EndsWith(подстрока) – проверяет, совпадает ли конец строки с указанной подстрокой.
Пример использования указанных методов приведен ниже

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
namespace MyProgram
{
  class Program
  {
    static void Main(string[] args)
    {
      string s1 = "Мама мыла раму";
      Console.WriteLine(s1);
      Console.WriteLine(s1 + "- содержит \"ам\" - " + s1.Contains("ам"));
      Console.WriteLine(s1 + "- первое вхождение \"ам\" - " + s1.IndexOf("ам"));
      Console.WriteLine(s1 + "- последнее вхождение \"ам\" - " + s1.LastIndexOf("ам"));
      Console.WriteLine(s1 + "- начинается с \"му\" - " + s1.StartsWith("му"));
      Console.WriteLine(s1 + "- заканчивается на \"му\" - " + s1.EndsWith("му"));
      Console.WriteLine(s1.Replace("ам", "ук")); Console.ReadKey();
    }
  }
}
image articles/514/514_9.png


Удаление и добавление подстрок

Для удаления и добавления подстрок из строки используются методы
  • Remove(Позиция, ЧислоСимволов) — удаляет заданное число символов из строки начиная с указанной позиции. Если число символов не указано, то строка завершится на указанной позиции.
  • Insert(Позиция, подстрока) – вставляет подстроку в строку начиная с указанной позиции.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
namespace MyProgram
{
  class Program
  {
    static void Main(string[] args)
    {
      string s1 = "Мама мыла раму";
      Console.WriteLine(s1);
      string s2 = s1.Remove(5, 4);
      Console.WriteLine(s2);
      Console.WriteLine(s2.Insert(5, "чистила"));
      Console.ReadKey();
    }
  }
}
image articles/514/514_10.png


Разделение и объединение строк

Для разделения строки на подстроки и сохранения их в массив используется метод Split(), в качестве аргумента которому передается символ-разделитель. По умолчанию в качестве символа разделителя используется пробел.
Для объединения строк в единую строку используется статический метод Join(), в качестве аргументов которому передаются строка-разделитель и массив строк, которые необходимо объединить через указанный разделитель.

Рассмотрим пример – посчитать количество слов во введенной строке.
Разделим строку на слова, посчитаем количество слов. Затем выведем массив слов и объединим слова снова в единую строку, используя в качестве разделителя строку " | ".

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
namespace MyProgram
{
  class Program
  {
    static void Main(string[] args)
    {
        string s1 = "Мама мыла раму";
        Console.WriteLine(s1);
        string[] s2 = s1.Split(' ');
        Console.WriteLine("Количество слов в строке: " + s2.Length);
        for (int i = 0; i < s2.Length; i++)
          Console.WriteLine(s2[i]);
      Console.WriteLine(String.Join(" | ", s2));
      Console.ReadKey();
    }
  }
}
image articles/514/514_11.png


Однако если слова разделяются не одним, а несколькими пробелами, то количество элементов в массиве s2 будет больше, чем количество слов:
8
      string s1 = "Мама мыла раму";
image articles/514/514_12.png


Метод Split() содержит перегрузку, позволяющую указать, что пустые строки из формируемого массива следует удалить – опция StringSplitOptions.RemoveEmptyEntries. Однако в этом случае в качестве разделителя необходимо указать массив символов или строк.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
namespace MyProgram
{
  class Program
  {
    static void Main(string[] args)
    {
        string s1 = "Мама мыла раму";
        char[] sym = { ' ' };
        Console.WriteLine(s1);
        string[] s2 = s1.Split(sym, StringSplitOptions.RemoveEmptyEntries);
        Console.WriteLine("Количество слов в строке: " + s2.Length);
        for (int i = 0; i < s2.Length; i++)
          Console.WriteLine(s2[i]);
      Console.WriteLine(String.Join(" | ", s2));
   Console.ReadKey();
    }
  }
}
image articles/514/514_13.png


Кроме того, для удаления начальных и конечных символов- разделителей из строки можно использовать метод Trim().

1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System;
namespace MyProgram
{
  class Program
  {
    static void Main(string[] args)
    {
      string s1 = " Привет, мир ";
      Console.WriteLine(s1 + "!");
      Console.WriteLine(s1.Trim(' ') + "!");
      Console.ReadKey();
    }
  }
}
image articles/514/514_14.png


Форматирование объектов

Класс String содержит статический метод Format(String, Object), который позволяет перевести указанный объект в строковое представление в соответствии с форматом, указанным в форме строки в качестве первого аргумента. Однако различные типы значений имеют различные форматы представления, и это – тема для отдельной статьи.

Закрепить использование строк Вы можете в разделе Строки курса Алгоритмика

Автор: Вставская Елена Владимировна

 
Написать комментарий:




Начинаем практику по языку C#




Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.