2013-04-18 8 views
1

Я пытаюсь преобразовать строку в строку [] с помощью двух разделителей, и я хочу разделителей быть нулевые строки в результате строки [] узлыStringSplitOptions.None не работает, как ожидалось

string source = "(('CO.IN'.bit = C) OR ('CO.IN'.bit = V))"; 
char[] delimiters = new char[] { '(', ')' }; 
string[] parts = source.Split(delimiters,StringSplitOptions.None); 

Ожидаемый результат для строки [] частей:

[null] 
[null] 
'CO.IN'.bit = C 
[null] 
' OR ' 
[null] 
'CO.IN'.bit = V 
[null] 
[null] 

Но полученный результат:

[null] 
[null] 
'CO.IN'.bit = C 
' OR ' 
'CO.IN'.bit = V 
[null] 
[null] 

Я скучаю два узла Я не понимаю, почему.

Может ли кто-нибудь мне помочь?

+0

Попробуйте добавить пробел как разделительный символ, если это не изменит вашу бизнес-логику. – Yahya

ответ

6

Ваше предположение о том, что вы получили null значения для разделителей неверно. Вы получаете пустую строку, если между двумя разделителями нет текста.

Первые две пустые строки ([null] в вашем сообщении) появляются потому, что между началом строки и первым разделителем нет текста и текста между первым и вторым разделителем.

Но C) OR ('CO (часть вашей строки) можно разделить на C, OR и 'CO без пустой строки между двумя разделителями.

+0

Значения emtpy не равны null, а String.Empty. –

+0

Вы правы, я предположил, что они были нулями, потому что автор вопроса написал это. – Dirk

+0

О! Спасибо! Я пропустил документацию. Большое спасибо, был так полезен. Это немного меняет итератор, но отлично работает! – Biggum

4

Выход в порядке. Обратите внимание на место до и после OR. Ожидаемое значение - это не то, что вы говорите. Выход «OR» равен «OR», а не «OR».

+0

Вы правы, я отредактировал источник. Спасибо. – Biggum

0

Я был не прав, как работают функции. Я ожидал, что разделители превратятся в нулевые узлы массива. Но Дирк помог мне понять, что он делает.

Полученный результат:

[null] 
[null] 
'CO.IN'.bit = C 
' OR ' 
'CO.IN'.bit = V 
[null] 
[null] 

Это означает, что delimietrs находятся между строками

[null] 
Delimiter 
[null] 
Delimiter 
'CO.IN'.bit = C 
Delimiter 
' OR ' 
Delimiter 
'CO.IN'.bit = V 
Delimiter 
[null] 
Delimiter 
[null] 

Я предположил, разделитель всегда в конце каждой строки, но не в последнем узле. Моя петля хорошо работала. Знайте, какой разделитель используется, это еще одна битва.

Большое спасибо!

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