Рядки в Сі-шарп - це об'єкти класу String, значенням яких є текст. Для роботи з рядками в цьому класі визначено безліч методів (функцій) і в цьому уроці ми розглянемо деякі з них.

Щоб використовувати рядок, його треба спочатку створити – привласнити яке-небудь значення, інакше ми отримаємо помилку: "Використання локальної змінної "[ім'я змінної]", якій не присвоєно значення". Оголосимо простий рядок і виведемо його на екран:

static void Main(string[] args)
 {
 string s = "Hello, World!";
 Console.WriteLine(s);
 }
static void Main(string[] args)
{
string s;
Console.WriteLine(s); // помилка, рядок не створений
}

Для об'єднання рядків використовується оператор "+".

string s = "Hello," + " World!";

Оператор "[]" використовується для доступу (тільки читання) до символу рядка за індексом:

string s = "Hello, World!";
char c = s[1]; // 'e'

Властивість Length повертає довжину рядка.

Спецсимволи

Символ "\" є службовим, тому, щоб використовувати символ зворотного слешу необхідно вказувати його двічі "\\".
Символ табуляції "\t"
Символ переведення рядка "\r\n"
Подвійні лапки – "\""

Методи (функції) класу String для роботи з рядками в Сі-шарп

Метод IsNullOrEmpty() повертає True, якщо значення рядка дорівнює null, або коли він порожній (значення дорівнює ""):

static void Main(string[] args)
 {
 string s1 = null, s2 = "", s3 = "Hello";
 String.IsNullOrEmpty(s1); // True
 String.IsNullOrEmpty(s2); // True
 String.IsNullOrEmpty(s3); // False 
 }

Метод IsNullOrWhiteSpace() працює як і метод IsNullOrEmpty(), тільки повертає True ще й тоді, коли рядок являє собою набір символів пробілу та/або табуляції ("\t"):

static void Main(string[] args)
 {
 string s1 = null, s2 = "\t", s3 = " ", s4 = "Hello";
 String.IsNullOrWhiteSpace(s1); // True
 String.IsNullOrWhiteSpace(s2); // True
 String.IsNullOrWhiteSpace(s3); // True 
 String.IsNullOrWhiteSpace(s4); // False 
 }

Як перевірити, чи є один рядок "більше" іншого?

Для порівняння рядків використовується метод Compare(). Суть порівняння рядків полягає в тому, що перевіряється їх ставлення щодо алфавіту. Рядок "a" "менше" рядка "b", "bb" "" рядка "ba". Якщо обидві рядки рівні - метод повертає 0, якщо перший рядок менше другого – "-1", якщо перший більше другого – "1":

static void Main(string[] args)
{
String.Compare("a", "b"); // повертає -1
String.Compare("a", "a"); // повертає 0
String.Compare("b", "a"); // повертає 1
 String.Compare("ab", "abc"); // повертає -1
String.Compare("Romania", "Russia"); // повертає -1
String.Compare("Rwanda", "Russia"); // повертає 1
String.Compare("Rwanda", "Romania"); // повертає 1 
}

Щоб ігнорувати регістр букв, метод потрібно передати, як третій аргумент true.
String.Compare("ab", "Ab"); // повертає -1
String.Compare("ab", "Ab", true); // повертає 0

Як перевести весь рядок у верхній/нижній регістр?

Для цього використовуються методи ToUpper() і ToLower():

static void Main(string[] args)
{
string s = "Hello, World";
Console.WriteLine(s.ToUpper()); // виводить "HELLO, WORLD"
Console.WriteLine(s.ToLower()); // виводить "hello, world"
Console.ReadLine();
}

Результат роботи програми:







Як перевірити, чи містить рядок підрядок?

Для перевірки змісту підрядка рядка використовується метод Contains(). Даний метод приймає один аргумент – підрядок. Повертає True, якщо рядок містить підрядок, в іншому випадку – False. Приклад:

static void Main(string[] args)
{
string s = "Hello, World";

if (s.Contains("Hello"))
Console.WriteLine("Містить"); 
Console.ReadLine();
}

Результат роботи програми:

Дана програма виводить слово "Містить", так як "Hello, World" містить підрядок "Hello".




Як знайти індекс першого символу підрядка, який містить рядок?

Метод допомоги indexof() повертає індекс першого символу підрядка, який містить рядок. Даний метод приймає один аргумент – підрядок. Якщо рядок не містить підрядка, метод повертає "-1". Приклад:

static void Main(string[] args)
{
string s = "Hello, World"; 
Console.WriteLine(s.IndexOf("H")); // 0
Console.WriteLine(s.IndexOf("World")); // 7 
Console.WriteLine(s.IndexOf("Zoo")); // -1 
Console.ReadLine();
}

Результат роботи програми:







Як дізнатися, починається/закінчується рядок зазначеного підрядка?

Для цього використовуються методи StartsWith() і EndsWith(), які повертають логічні значення. Приклад:

static void Main(string[] args)
{
string s = "Hello, World";
Console.WriteLine(s.StartsWith("Hello")); // True
Console.WriteLine(s.StartsWith("World")); // False
Console.WriteLine(s.EndsWith("World")); // True
Console.ReadLine();
}

Результат роботи програми:







Як вставити в рядок підрядок, починаючи з вказаної позиції?

Метод Insert() використовується для вставки підрядка в рядок, починаючи із зазначеної позиції. Даний метод приймає два аргументи – позиція і підрядок. Приклад:

static void Main(string[] args)
{
string s = "Hello World!";
Console.WriteLine(s.Insert(5,",")); // вставляє кому на 5 позицію 
Console.ReadLine();
}

Результат роботи програми:







Як обрізати рядок, починаючи із зазначеної позиції?

Метод Remove() приймає один аргумент – позиція, починаючи з якої обрізається рядок:

static void Main(string[] args)
{
string s = "Hello, World";
 Console.WriteLine(s.Remove(5)); // видаляємо всі символи, починаючи з 5 позиції, на екран виведеться "Hello"
Console.ReadLine();
}

Результат роботи програми:

В метод Remove() можна передати і другий аргумент – кількість обрізаємих символів. Remove(3, 5) – видаляє з рядка п'ять символів починаючи з 3-го.




Як отримати підрядок рядка, починаючи з вказаної позиції?

Для цього використовується метод Substring(). Він приймає один аргумент – позиції, з якої буде починатися новий підрядок:

static void Main(string[] args)
{
string s = "Hello, World";
Console.WriteLine(s.Substring(7)); // отримуємо рядок починаючи з 7 позиції, виведе "World"
Console.ReadLine();
}

Результат роботи програми:

В метод Substring(), як метод Remove() можна передати і другий аргумент – довжина підрядка. Substring (3, 5) – повертає підрядок довжиною в 5 символів починаючи з 3-ї позиції рядка.



Як замінити в рядку всі підрядки зазначеного новоїго підрядка?

Метод Replace() приймає два аргументи – підрядок, який потрібно замінити і новий підрядок, на який буде замінений перший:

static void Main(string[] args)
{
string s = "Hello, World Hello";
Console.WriteLine(s.Replace("Hello", "World")); //виведе "World, World, World"
Console.ReadLine();
}

Результат роботи програми:







Як перетворити рядок в масив символів?

Метод ToCharArray() повертає масив символів зазначених рядків:

static void Main(string[] args)
{
string s = "Hello, World";
char[] array = s.ToCharArray(); // елементи масиву – 'H', 'e', 'l', 'l'... 
}

Як розбити рядок за вказаним символом на масив підрядків?

Метод Split() приймає один аргумент - символ, за яким буде розбитий рядок. Повертає масив рядків. Приклад:

static void Main(string[] args)
{
string s = "Arsenal,Milan,Real Madrid,Barcelona";
 string[] array = s.Split(','); // елементи масиву – "Arsenal", "Milan", "Real Madrid", "Barcelona" 
}

Невідмінювані рядки

Варто знати, що об'єкти класу String являють собою фіксовані (Immutable) послідовності символів Unicode. Коли ви використовуєте будь-який метод по зміні рядка (наприклад Replace()), він повертає нову змінену копію рядка, вихідні ж рядки залишаються незмінними. Так зроблено тому, що операція створення нового рядка набагато менш затратна, ніж операції копіювання і порівняння, що підвищує швидкість роботи програми. В Сі-шарп також є клас StringBuilder, який дозволяє змінювати рядки. Про особливості роботи з ним ми поговоримо в одному з подальших уроків.

Автор Swytos                                              << попереднянаступна >>                                                 До змісту


2016-05-29 • Просмотров [ 139 ]