Способы разбиения строки на список в C#

Разбиение строки на части — одна из базовых задач в программировании. В C# существует несколько удобных способов превратить строку в список строк (или массив), используя различные разделители, включая символы, подстроки и регулярные выражения. В этой статье рассмотрим основные способы решения этой задачи.
1. Разделение с помощью String.Split()
Метод String.Split() позволяет разделить строку по одному или нескольким символам или строкам.
Пример 1: Разделение по символу
string input = "яблоко,банан,груша";
string[] parts = input.Split(',');
List<string> list = new List<string>(parts);
Пример 2: Разделение по нескольким символам
string input = "яблоко;банан,груша";
string[] parts = input.Split(new[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries);
2. Разделение по строке (например, перенос строки)
Если строка содержит переносы строк, можно использовать:
string input = "строка1\r\nстрока2\nстрока3";
string[] lines = input.Split(new[] { "\r\n", "\n" }, StringSplitOptions.None);
Можно также преобразовать в список:
List<string> lineList = new List<string>(lines);
3. Разделение с использованием регулярных выражений (Regex.Split)
Метод Regex.Split() полезен, когда нужно разделить по шаблону, а не по фиксированному символу.
Пример: Разделение по пробелам и табуляции
using System.Text.RegularExpressions;
string input = "яблоко\tбанан груша";
string[] words = Regex.Split(input, @"\s+");
\s+ означает "один или несколько пробельных символов".
4. LINQ + Split() для фильтрации и обработки
Можно комбинировать Split с LINQ, чтобы сразу обрабатывать результат:
using System.Linq;
string input = "яблоко,,банан,,груша";
List<string> list = input
.Split(',', StringSplitOptions.RemoveEmptyEntries)
.Select(s => s.Trim())
.ToList();
5. Разделение с использованием Span (для высокой производительности)
Начиная с C# 7.2 и .NET Core, можно использовать Span и ReadOnlySpan для эффективного разбиения без создания дополнительных строк в памяти. Этот способ сложнее, но быстрее:
ReadOnlySpan<char> span = "яблоко,банан,груша".AsSpan();
int index;
while ((index = span.IndexOf(',')) != -1)
{
var word = span.Slice(0, index);
Console.WriteLine(word.ToString());
span = span.Slice(index + 1);
}
Console.WriteLine(span.ToString()); // последняя часть
-
-
Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.