2015-12-31 4 views
0

Когда я делаю следующее ....Split ("", "|") возвращает 1 пункт

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

...

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

Почему?

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

Спасибо.

+0

Что это содержимое 'sLines'? –

+3

Если выражение представляет собой строку с нулевой длиной (""), Split возвращает одноэлементный массив, содержащий строку нулевой длины. отсюда https://msdn.microsoft.com/en-us/library/6x627e5f%28v=vs.90%29.aspx – fukanchik

+0

@fukanchik - ссылка, которую вы предоставили, предназначена для функции Split. Плакат использует метод Split.Method. См. Https://msdn.microsoft.com/en-us/library/tabh47cf%28v=vs.100%29.aspx – dbasnett

ответ

3

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

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

2

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

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

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

0

Вы можете использовать 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("|"))

Смежные вопросы