Разделенная строка, возвращающая дополнительную строку в конце возвращаемого массива - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь разбить строку, используя ; в качестве разделителя.

Мой вывод странный, почему в конце возвращаемого массива есть пустая строка?

string emails = "bitebari@gmail.com;abcd@gmail.com;";
string[] splittedEmails = emails.TrimEnd().Split(';');

foreach (var email in splittedEmails)
{
    Console.WriteLine("Value is :" + email);
}

Вывод консоли выглядит следующим образом:

Значение: bitebari@gmail.com

Значение: abcd@gmail.com

Значение:

1 Ответ

6 голосов
/ 12 февраля 2020

Метод string.Split по умолчанию не удаляет пустые записи, в любом случае вы можете сказать ему сделать это, предоставив ему StringSplitOptions. Попробуйте использовать ваш метод с параметром StringSplitOptions.RemoveEmptyEntries.

string[] splittedEmails = emails.Split(';', StringSplitOptions.RemoveEmptyEntries);

На самом деле вы должны попытаться передать ; в ваш метод TrimEnd, так как в противном случае он усекает пробелы. Поэтому ваша строка остается с ; в конце. Это может привести к следующему:

string[] splittedEmails = emails.TrimEnd(';').Split(';');

Оба решения выше работают, это действительно предпочтение, так как разница в производительности не должна быть такой большой.

Редактировать

Это поведение считается «стандартным», по крайней мере, в C#, позвольте мне процитировать MSDN для этого.

Такое поведение облегчает такие форматы, как файлы с разделителями-запятыми (CSV), представляющие табличные данные. Последовательные запятые представляют пустой столбец.

Вы можете передать необязательный параметр StringSplitOptions.RemoveEmptyEntries, чтобы исключить любые пустые строки в возвращаемом массиве. Для более сложной обработки возвращенной коллекции вы можете использовать LINQ для управления последовательностью результатов.

Кроме того, для этого нет особого случая.

...