Строки – это объект типа string(System.String в нотации .Net) который хранит в себе текстовую строку. Хотя строки относят к примитивным типам данных, на самом деле это ссылочный тип. Внутри строк хранится коллекция символов типа char.

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

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

C# позволяет читать отдельные символы строки, обращаясь к отдельному символу по индексу, при это изменение не разрешено:

var s = "Текст";
for (int i = 0; i < s.Length; i++)
{
    Console.WriteLine(s[i]);
}

s[0] = "т"; // ошибка

Создание строк

Строку можно создать присвоив ей значение строкового литерала, или с помощью оператора new:

string text1 = null; //строка без значения
string text2 = ""; //пустая строка
string text3 = "Some text";
string text4 = new string('x', 4); //xxxx
string text5 = new string(new[] { 'M', 'e', 's', 's', 'a', 'g', 'e' }); //Message

Пустая строка и строка без значения

Пустая строка – это объект типа string, в котором не содержится символов, её длина равна нулю. В отличии от пустой строки, строка без значения(null-string), не ссылается на объект.

Создать пустую строку можно одним из способов:

var empty1 = "";
var empty2 = string.Empty;

IsNullOrEmpty - проверка на пустоту

Для проверки на null и пустоту используется метод IsNullOrEmpty, он возвращает true если строка пуста или равна null.

string nullString = null;
var b1 = string.IsNullOrEmpty(nullString); //true
var b2 = string.IsNullOrEmpty("test"); // false

IsNullOrWhiteSpace

Метод принимает на вход строку и возвращает true если строка равна null, или состоит из пробельных символов.

string whiteString = "\t   \r\n";
var b1 = string.IsNullOrWhiteSpace(whiteString); //true
var b2 = string.IsNullOrWhiteSpace("123"); // false

Объединение строк

Для конкатенации(объединения) строк можно использовать метод Concat или операторы “+” и “+=”:

string h = "Hello";
string w = "World";

h += " "; //добавляем пробел
w = w + "!"; //добавляем восклицательный знак
Console.WriteLine(string.Concat(h, w));

Для объединения последовательности(массива, коллекции) с разделителем, можно использовать метод Join:

//первый аргумент - разделитель для частей
var t1 = string.Join(",", "1", "2", "3"); //1,2,3
//целочисленный массив преобразуется в текст
var t2 = string.Join("; ", new[] { 7, 8, 9 }); //7; 8; 9

Смена регистра

Для преобразования строк в нижний регистр используется метод ToLower, в верхний – ToUpper.

var t = "Abdc";
var lower = t.ToLower(); //abcd
var upper = t.ToUpper(); //ABCD

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

Равно или Equals

Equals – сравнивает на идентичность две строки(аналог оператора “==”). При сравнении учитывается регистр символов.

var b1 = "abc" == "abc"; //true
var b2 = "bcd" != "Bcd"; //true
var b3 = "x".Equals("c"); //false

Equals может принимать дополнительный параметр StringComparison, который определяет настройки сравнения.

Compare

Сравнивает значения двух строк, возвращает целое число:

Число Значение
Отрицательное Первая строка меньше второй, или имеет значение null
Ноль Строки равны
Положительное Вторая строка меньше первой, или имеет значение null

сравнение производиться в порядке сортировки, при этом “A” меньше “B”, “D” больше “С”.

int x = string.Compare( "qwerty", "asdfg"); // > 0

CompareOrdinal

Сравнение двух строк без учета языка и региональных параметров, возвращает результат аналогично предыдущему методу.

int y = string.CompareOrdinal( "v", "v"); // == 0

StartsWith

Возвращает true если строка начинается из подстроки, иначе false

var st = "0987654321";
bool b = st.StartsWith("09"); //true

EndsWith

Возвращает true если строка заканчивается на переданную подстроку, иначе false

var st = "0987654321";
bool b = st.EndsWith("32"); //false

Поиск подстрок

IndexOf

Производит поиск и возвращает позицию начала первого вхождения подстроки(символа), или -1 если подстрока не найдена.

int i1 = "twit".IndexOf("t"); //0

LastIndexOf

Ищет заданный текст в строке и возвращает позицию начала последнго вхождения подстроки(символа), или -1 если подстрока не найдена.

int i2 = "twit".LastIndexOf("t"); //3

Trim - удаление разделителей

Методы для удаления символов-разделителей из строки:

  • Trim – удаляет символы с начала и конца строки;
  • TrimStart – только из начала;
  • TrimEnd – только из конца;
string s = "   1 Test   ";
var trim = s.Trim(); // "1 Test"
var start = s.TrimStart(); // "1 Test   "
var end = s.TrimEnd(); // "   1 Test"
var custom = s.Trim(' ', 't'); // "1 Tes"

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

Разделение

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

string[] parts = "10,11,12".Split(",");

Если таким образом разбить строку с несколькими разделителями подряд, то в результирующий массив, попадут пустые строки. Для того, чтобы исключить такой вариант, можно воспользоваться методом Split с параметром StringSplitOptions.RemoveEmptyEntries:

string csv = "a;b;c;;d;f;g;";
string[] parts = csv.Split(";", StringSplitOptions.RemoveEmptyEntries);
foreach(var item in parts)
{
    Console.WriteLine(item);
}

Получение подстроки

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

string k = "United Kingdom";
var r1 = k.Substring(0, 6); //United
var r2 = k.Substring(7, 4); //King
var r3 = k.Substring(7); //Kingdom

Редактирование строк

К операциям редактирования относят:

  • поиск и замена;
  • вставка подстроки;
  • удаление части строк;
  • функции дополнения.

Замена

Для замены символов или части строки, используется метод Replace, как аргументы принимает искомую подстроку и текст на который ее нужно заменить(аналог операции найти и заменить в текстовых редакторах):

//замена слова
string n = "United States";
string m = n.Replace("States", "Kingdom");
Console.WriteLine(m); //United Kingdom

//множественная замена символов
var f = "2;4;6;8;10";
Console.WriteLine(f.Replace(";", ", ")); //2, 4, 6, 8, 10

Вставка

Метод Insert предназначен для вставки подстроки с указанной в качестве аргумента позиции.

string v = "Some message";
//вставка слова
string p = v.Insert(5, "text");
Console.WriteLine(p); //Some textmessage
//вставляем пробел между словами
Console.WriteLine(p.Insert(9, " ")); //Some text message

Удаление

Метод Remove позволяет удалить часть строки. В качестве аргументов принимает позицию с которой начинается удаление, и количество символов, которые нужно удалить(если не указано, удаляются все символы до конца строки):

string text = "London is the Capital of Great Britain";
//удаляем слово Great
Console.WriteLine(text.Remove(25, 6));
//оставляем только London
Console.WriteLine(text.Remove(6));

Дополнение строк

Для дополнения строки символами до указанной длины, используются методы:

  • PadLeft – возвращает новую строку в дополненную слева указанными символами;
  • PadRight – дополняет указанными символами справа.

Если символ для дополнения не указан, используется пробел.

Эти методы удобно использовать для вывода чисел и текста с выравниванием:

string[] nums = new[] { "10", "1023", "2" };
//выводим числа с выравниванием по правому краю
for (int i = 0; i < nums.Length; i++)
{
    Console.WriteLine(nums[i].PadLeft(4));
}
// Результат
//  10
//1023
//   2

//добавление незначащих нулей к двоичным числам
string[] binNums = new[] {"101", "111010", "11001"};
for (int i = 0; i < binNums.Length; i++)
{
    Console.WriteLine(binNums[i].PadLeft(8, '0'));
}
//00000101
//00111010
//00011001

//дополнение справа
string tree = "|";
for (int i = 1; i < 6; i++)
    Console.WriteLine(tree.PadRight(i, '*'));

Работа со строками

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

Подведем итог:

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

Смотрите также: