2013-04-18 4 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] 
[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

네가 맞아, 나는 질문의 저자가 그것을 썼기 때문에 그들이 null이라고 생각했다. – Dirk

+0

오! 고맙습니다! 나는 문서를 놓쳤다. 고마워, 도움이되었습니다. 그것은 내 반복자를 조금 변경하지만 위대한 작품 !! – Biggum

4

출력이 정상입니다. OR 전후의 공백에주의하십시오. 기대하는 가치는 당신이 말하는 것이 아닙니다. "OR"출력은 "OR"가 아닌 "OR"입니다.

+0

네 말이 맞아. 나는 소스를 편집했다. 고맙습니다. – Biggum

0

나는 함수가 어떻게 작동하는지 잘못 생각했습니다. 구분 기호가 배열의 null 노드가 될 것으로 예상됩니다. 그러나 Dirk은 그것이 무엇을하는지 이해하는 것을 도왔습니다. 얻은

결과는 다음과 같습니다

[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] 

사이에 의미합니다. 루프가 잘 작동했습니다. 구분 기호가 사용 된 것을 아는 것이 또 다른 전투입니다.

감사합니다.

관련 문제