Введение в строки
Строки в C# — это последовательности символов, используемые для хранения и обработки текстовой информации. В C# строки представлены типом string
, который является ссылочным типом данных. Под капотом string
в .NET использует кодировку UTF-16 для представления символов.
Основы работы со строками
Объявление и инициализация строк
Чтобы создать строку, просто объявите переменную типа string
и инициализируйте её:
string greeting = "Привет, мир!";
Неизменяемость строк
Важная особенность строк в C# — они неизменяемы (immutable). Это значит, что после создания строки её содержимое не может быть изменено. Каждая операция, которая кажется "изменяющей" строку, на самом деле создаёт новую строку.
string s = "Привет";
s += ", мир!"; // Создаётся новая строка "Привет, мир!"
Доступ к символам
Доступ к отдельным символам строки осуществляется через индексатор:
char firstChar = greeting[0]; // 'П'
Операции со строками
Конкатенация
Самый простой способ объединить две строки — использовать оператор +
:
string fullName = "Иван" + " " + "Иванов";
Форматирование строк
Для более сложного и удобного создания строк часто используется метод String.Format
или интерполяция строк:
string name = "Иван";
int age = 30;
string info = String.Format("Имя: {0}, Возраст: {1}", name, age);
// Или с использованием интерполяции строк
string infoInterpolated = $"Имя: {name}, Возраст: {age}";
Сравнение строк
Сравнение строк может осуществляться разными способами, но самый распространённый — это String.Equals
:
bool areEqual = string.Equals("Привет", "привет", StringComparison.OrdinalIgnoreCase);
Поиск и выборка
Методы типа Contains
, StartsWith
, EndsWith
позволяют проверить наличие подстроки, начала или окончания строки соответственно.
bool containsWord = greeting.Contains("мир");
Продвинутые операции со строками
Работа с символами и Char
Строка в C# — это массив char
. Можно работать с отдельными символами, используя их коды ASCII или Unicode.
char[] characters = greeting.ToCharArray();
Разделение строк
Разделение строки на подстроки осуществляется с помощью метода Split
:
string data = "Иван,30,Москва";
string[] parts = data.Split(',');
Работа с StringBuilder
Для оптимизации работы со строками, особенно при частых изменениях, используют StringBuilder
. Он представляет собой изменяемую строку и идеален для сценариев, где требуется выполнить множество модификаций текста:
StringBuilder sb = new StringBuilder("Привет");
sb.Append(", мир!");
string result = sb.ToString();
Заключение первой части
Мы рассмотрели основные понятия и операции со строками в C#. Строки — это центральный элемент многих программ, и их эффективное использование является ключом к написанию чистого и эффективного кода. Во второй части мы углубимся в темы, связанные с эффективностью, обработкой и манипуляциями со строками, а также рассмотрим некоторые продвинутые техники и практики.
Эффективность работы со строками
Из-за неизменяемости строк важно понимать, как эффективно работать с ними, чтобы избежать лишнего расхода памяти и времени выполнения.
Методы Substring
и Remove
Для извлечения подстроки из строки используется метод Substring
:
string sentence = "Привет, мир!";
string word = sentence.Substring(0, 6); // "Привет"
Метод Remove
используется для удаления части строки:
string newSentence = sentence.Remove(6); // "Привет"
Изменение регистра
Методы ToUpper
и ToLower
преобразуют строку в верхний или нижний регистр:
string lowerCase = greeting.ToLower(); // "привет, мир!"
string upperCase = greeting.ToUpper(); // "ПРИВЕТ, МИР!"
Работа с массивами строк
Иногда, работы со строками включает манипуляции с массивами строк, как в примере с Split
. Можно также соединять массивы строк обратно в одну строку с помощью String.Join
:
string[] values = { "Иван", "30", "Москва" };
string joinedString = String.Join(", ", values); // "Иван, 30, Москва"
Поиск и обработка строк
Методы IndexOf
и LastIndexOf
IndexOf
помогает найти позицию подстроки в строке:
int position = greeting.IndexOf("мир"); // 8
LastIndexOf
выполняет поиск начиная с конца строки.
Регулярные выражения
Для сложного поиска и манипуляций со строками часто используются регулярные выражения (класс Regex
в пространстве имён System.Text.RegularExpressions
):
Regex regex = new Regex(@"\d+");
Match match = regex.Match("Иван 30 лет");
if (match.Success)
{
Console.WriteLine(match.Value); // "30"
}
Форматирование строк
Составные форматы
Составное форматирование позволяет вставлять значения переменных в строку:
string formatString = String.Format("Имя: {0}, Возраст: {1}", name, age);
Интерполяция строк
Интерполяция строк — более современный и удобный способ форматирования:
string interpolatedString = $"Имя: {name}, Возраст: {age}";
Работа с StringReader
и StringWriter
StringReader
и StringWriter
представляют собой удобные способы для чтения и записи строк:
using StringWriter writer = new StringWriter();
writer.WriteLine("Привет,");
writer.WriteLine("мир!");
string writtenString = writer.ToString(); // "Привет,\nмир!\n"
using StringReader reader = new StringReader(writtenString);
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
Заключение
В этой статье мы углубились в основы и некоторые продвинутые аспекты работы со строками в C#. Рассмотренные примеры и техники являются фундаментальными для понимания и эффективного использования строк в различных сценариях программирования на C#. Помните, что строки являются ключевым элементом во многих приложениях, и их правильное использование может значительно улучшить производительность и читаемость вашего кода.
Статья написана с учётом как начинающих, так и более опытных программистов. Надеюсь, она поможет вам лучше понять и использовать строки в C#.