Split("", "|") возвращает 1 элемент

Когда я делаю следующее....

    Dim s As String = ""
    Dim sLines() As String = s.Split("|", StringSplitOptions.None)

...

sLines.Count составляет 1.

Зачем?

Делить нечего, и разделяемая строка пуста, поэтому я ожидаю, что sLines.Count будет 0.

Спасибо.

3 ответа

Решение

Этакая последовательность: если "a|b" разделить на | является ["a", "b"] а также "a" разделить на | является ["a"], это имеет некоторый смысл для "|b" разделить на | быть ["", "b"] а также "" разделить на | быть [""].

Вы можете удалить все пустые записи, передав StringSplitOptions.RemoveEmptyEntries вместо Noneили просто проверьте s = String.Empty в противном случае вручную.

Проверьте документацию Split:

Если этот экземпляр не содержит ни одной из строк в разделителе, возвращаемый массив состоит из одного элемента, который содержит этот экземпляр.

Это твой случай. "" не содержит "|" так что один элемент "" возвращается

Ты можешь использовать IIf() функция для обработки пустой строки

 Dim s As String = ""
 Dim sLines() As String = IIf(s = String.Empty, Nothing, s.Split("|"))
 Dim cnt As Integer
 If sLines IsNot Nothing Then
    'your code
    cnt = sLines.Count
 Else
    'your code
     cnt = 0
 End If

Примечание: если вы хотите обработать пробелы (Dim s As String = " ") просто используй trim() как это

IIf(Trim(s) = String.Empty, Nothing, s.Split("|"))

Другие вопросы по тегам