Рубріки: ОсновыТеория

Как работать со строками в C#: базовые операции

Сергій Бондаренко

Сегодня речь пойдет о строках в языке C#. Мы рассмотрим основные операции со строчками, например, разбиения и склейку строк (c# string split). К концу материала вы уверенно овладеете всеми базовыми инструментами обработки строк в C#.

Содержание статьи:

1. Вступление
2. Получение строки из массива
3. Конкатенация строк
4. Конструктор
5. Индексаторы
6. Изменение регистра
7. Разделение строк, подстроки (c# string split)
7.1 Разбиение строк: примеры (split c# пример)
8. Обрезка строк
9. Вставка текста
10. Сравнение строк
11. В заключение

Вступление

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

string sentence = “Набор текстовых символов”  // пример присвоения строковой переменной sentence

Код вывода в консоли обычного текста:

using System;
namespace test1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Пустая строчка"); //строковый литерал
        }
    }
}

Результат выполнения кода C#

Получение строки из массива

Строковый объект получается из символьного массива. Предположим, у нас есть набор отдельных букв 'h', 'i', 'g', 'h', 'l', 'o', 'a', 'd',  и мы составляем из них целую строку:

using System;
namespace Array_to_stroka
    {
    class Program
    {
        static void Main(string[] args)
        {
            char[] chararray = { 'h', 'i', 'g', 'h', 'l', 'o', 'a', 'd'}; //символьный массив
            string str = new string(chararray); // объединение символов в строковую переменную 
            Console.WriteLine(str); //строковый литерал
        }
    }
}

Результат выполнения кода C#

Тип данных string является неизменяемым. Создав один раз строку, вы уже не можете поменять ее содержимое. При этом объект string является ссылочным — когда вы меняете содержимое объекта, меняется ссылка на область памяти, где оно содержится. Это не является проблемой — впоследствии сборщик мусора удалит неиспользуемые строки.

Пример изменения строки:

string s = "Это моя метафора";
            s = "Это новая метафора";
            Console.WriteLine(s); // отображение на экране

Конкатенация строк

Редактируя строковые данные, мы часто прибегаем к операции конкатенации — когда строка добавляется в конец другой строки.

Делается это с помощью логического оператора сложения:

using System;
namespace test
{
    class dobavlenie_strok
    {
        static void Main(string[] args)
        {
            string start = "Highload  "; //первая часть
            string end = "today 😉 "; // вторая часть
            string final = start + end;    // final = "Highload today"
            Console.WriteLine(final); // Печать результата 
        }
    }
}

Результат выполнения кода C#

Альтернативный способ конкатенации строк — используя метод Concat:

string start = "Гуд ";
           string end = "тудей!";
           string concat = string.Concat(start, end); // Гуд тудей!

Еще один способ объединения строк — методом Join:

string n3 = "I’ve got";
            string n4 = "a";
            string n5 = "beautiful";
            string n6 = "day";
            string n7 = "!";
            string[] values = new string[] { n3, n4, n5, n6, n7 };

            String n8 = String.Join(" ", values);
            Console.WriteLine(n8); // Печать в консоли результат — I’ve got a beautiful day!
       

Результат выполнения кода C#

Конструктор

В C# имеется возможность создания строк при помощи конструкторов класса String. Так, например, конструкция string = String('P', 11) позволит вывести «PPPPPPPPPPP»:

  string result = new String('P', 11);
Console.WriteLine(result); // печать результата

Результат выполнения кода C#

Создание строки возможно из простого символьного массива:

  {
    class sborka
    {
        static void Main(string[] args)
        {
            string final = new String(new char[] { 'Е', 'л', 'е', 'н', 'а' });
            Console.WriteLine(final); // печать результата на экран
        }
    }
}

Результат выполнения кода C#

Индексаторы

Поскольку строка является набором символов, в любой момент можно обратиться к каждому из элементов. Для этого применяется индексатор, число, которое считается, как и в массиве — с нуля:

string s1 = "Highload";
            char ch1 = s1[0]; 
            Console.WriteLine(ch1); // Отображение в консоли элемента “H” с индексом ноль
            Console.WriteLine(s1.Length); // Отображение в консоли длины строки

Результат выполнения кода C#

Изменение регистра

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

string s = "Хочешь, я расскажу тебе секрет?";
string t = s.ToUpper(); // ХОЧЕШЬ, Я РАССКАЖУ ТЕБЕ СЕКРЕТ?

Результат выполнения кода C#

Обратная функция — ToLower, меняет регистр строк на нижний: 

string s = "Саша Сережа Елена Андрей Екатерина Мила";
string t = s.ToLower(); // саша сережа елена андрей екатерина мила

Результат выполнения кода C#

Еще один вариант изменения регистра осуществляется с помощью метода ToTitleCase. Он используется в тех случаях, когда необходимо сделать заглавными первые буквы всех слов. Когда метод встречает слово, состоящее из заглавных букв, он считает это слово аббревиатурой и оставляет как есть. Для ToTitleCase необходимо указывать пространство имен System.Globalization, которое содержит информацию о классах разных культур и регионов:

using System;
using System.Globalization;
public class Example
{
    public static void Main()
    {
        string[] values = { "сказка, рассказанная на ночь", "беЖиТ дорога подО Мной",
                          "Russia today",
                          "Возвращение Шерлока Холмса", "СССР и дети"};

        TextInfo ti = CultureInfo.CurrentCulture.TextInfo;
        foreach (var value in values)
            Console.WriteLine("{0} --> {1}", value, ti.ToTitleCase(value));
    }
}

результат выполнения кода C#

Разделение строк, подстроки (c# string split)

Часто приходится разделять текст (split c#) на фрагменты. Применим метод IndexOf (), который определяет вхождение подстроки по индексу. Предположим, необходимо разделить два предложения, разделенные точкой. В этом случае код будет выглядеть так:

string myString = "Highload.Today"; // исходный текст
int index = myString.IndexOf(".") + 1;  // определение индекса подстроки по точке
string fragment_stroki= myString.Substring(index); // создание подстроки
Console.WriteLine(fragment_stroki); // печать подстроки по индексу 

Результат выполнения кода C#

Разбиение строк: примеры (split c# пример)

Давайте посмотрим на примеры альтернативного разбиения строк в C#. Метод Substring также может применяться для разделения строк. Он либо просто возвращает текст с обозначенного символа, либо делает это на указанную длину:

using System;
using System.Globalization;

public class cut
{
    public static void Main()
    {
        string fragment1 = "Highload.today!"; // исходный текст
        string fragment2 = fragment1.Substring(9,5); // создание строки по индексу и длине
        Console.WriteLine(fragment2); // вывод на экран today
           }
}

Результат выполнения кода C#

Также можно было использовать:

string fragment1 = "Highload.today!"; // исходный текст
string fragment2 = fragment1.Substring(9);

В этом случае второй элемент будет today! (с восклицательным знаком включительно).

Методом Split строковые данные преобразуются в массив подстрок:

string text = "И теперь уходим понемногу"; // 
string[] slova= text.Split(' '); // Разделение на коллекцию слов
Console.WriteLine(slova[0]); // Печать элемента с индексом 0
Console.WriteLine(slova[3]); // Печать элемента с индексом 3

Результат выполнения кода C#

Обрезка строк

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

string s = "Казнить, невозможно помиловать";
Console.WriteLine(s.Remove(7)); // обрезка текста, начиная с пятого символа
Console.ReadLine();

Результат выполнения кода C#

Вставка текста

Наиболее удобный способ вставки подстроки — используя метод Insert(). В его аргументах следует указывать номер символа, на место которого будет выполнена вставка.

string stroka = "Highloadtoday";
Console.WriteLine(stroka.Insert(8, ".")); // вставляем точку на место 8 символа
Console.ReadLine();

Результат выполнения кода C#

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

Задача сравнения строк выполняется методом CompareTo(). Результатом такого сравнения является число, принимающее значение 1, 0 или -1: 

  • 1 — сравниваемый текст начинается с символа, раньше по алфавиту;
  • 0 — означает, что строки идентичны;
  • -1 — когда сравниваемый текст начинается с символа позже по алфавиту.
class appz
    {
        static void Main(string[] args)
        {
            string first = "Highload";
            string second = "Zighload";

            int t = first.CompareTo(second);
            // t = -1
            Console.WriteLine(t);
            Console.ReadLine();
        }
    }

Результат выполнения кода C#

Строки можно сравнивать также методом Compare():

String.Compare("Stroka1", "Stroka2");

Когда в задачу не входит учитывание регистра, в методе CompareTo используется аргумент true:

String.Compare("stroka1", "Stroka2", true);

Еще один прием для сравнения строк — метод Equals. Он записывается либо с одним аргументом, либо с двумя:

string city = "Kiyv";
bool sravnenie;
sravnenie = city.Equals("Kiyv");
Console.WriteLine(sravnenie);
sravnenie = city.Equals("Kiev");
Console.WriteLine(sravnenie); 
sravnenie = String.Equals(city, "Kiyv");
Console.WriteLine(sravnenie);
sravnenie = String.Equals(city, "Kiev"); 
Console.WriteLine(sravnenie);
Console.ReadLine();

Результат выполнения кода C#

В заключение

В C# представлены все базовые операции по работе со строкой. Они вполне понятны даже для новичков. Надеемся, вам было полезно! Для закрепления материала по работе со строковыми переменными можно посмотреть видео:

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023