Рядок – це об’єкт типу 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 є незмінним, редагування рядка символів, призводить до створення нового об’єкта в пам’яті.
  • При порівнянні і пошуку, враховується регістр символів та регіональні налаштування, при цьому порівняння відбувається в алфавітному порядку, як це прийнято в сортуванні по зростанню.
  • Рядок можна розглядати як символьний масив, до елементів якого, можна звертатися за індексом, при цьому дозволяється тільки читання даних.

Дивіться також: