2011-09-19 2 views
2

나는 사항 String.split using.NET 3.5에 문제가 : 분할.NET 문자열 분할 방법 이상한 행동

문자열입니다 : 윈폼의 applicaton 내에서 사용

dim source as string = "ab|foo|bar|bar|bar-foo|ab|ezrezertr|ghghhjhj|ab|foo|xxx|" 
dim result() as string = source.split("ab|") 

는, 결과는 " 올바른 ":

결과 (0)는"foo | bar | bar | bar-foo | "입니다.

결과 (1)가 "ezrezertr | ghghhjhj |"입니다.

결과 (2)는 "foo | xxx |"입니다.

그리고 기쁩니다! 뒤에 ASP.NET의 코드 내에서 사용

, 결과는 다음과 같습니다

결과 (0)입니다 "B | foo에 | 바 | 바 | 바 foo는 |"

결과 (1)은 "b | ezrezertr | ghghhjhj |"입니다.

결과 (2)는 "b | foo | xxx |"입니다.

즉, 분리 함수는 분리 기호 문자열의 첫 번째 문자 만 제거합니다! 누군가가 이유를 알고 있습니까?

+1

WinForms, Console 또는 ASP.NET 응용 프로그램에서 Split() 메서드를 어디에서 사용하는지에 차이가 없습니다. System.String 클래스는 모든 곳에서 동일합니다. 문제는 코드에 있습니다. – mironych

답변

5

String.Split이 아닌 Regex.Split을 사용하는 것처럼 ASP.NET 결과가 나타납니다. 문자열 "ab|"은 "a"다음에 "b"또는 아무 것도없는 정규 표현식으로 해석되므로 "a"만 일치합니다.


나중에

: 두 번째 이론 : 단일 문자열 인수를 String.Split의 과부하가 없습니다

  • . 단일 인수 오버로드는 char의 배열을 사용합니다.
  • String.Splt(char())으로 나뉘어 전달되는 문자 수는입니다.
  • VB, Option Strict On없이 암시 적으로 문자열을 문자 배열로 변환합니다.

는 그러므로 그래서 저는 theString.Split(anotherString)theString.Split(anotherString.ToCharArray())로 취급되고, 당신은 option strict on이없는 ASP.NET의 경우 생각합니다.

따라서 "b"에서 분열합니다.

그러나 이것은 첫 번째 경우가 문자열을 전달하는 방식에 대한 질문을 남겨 둡니다. 그러나 여분의 매개 변수없이 String()을 취하는 과부하가 없습니다 (SplitOptions) ...

요약 : Visual Basic의 여분의 암시 적 변환과 파일/프로젝트/언어 수준의 동작 집합은 동일한 코드가 다르게 동작 할 수 있습니다.

+0

문제는 Winforms 코드에서 ASP 코드 숨김으로 함수를 복사하여 붙여 넣은 것입니다. 그런 다음 설명 된대로 결과를 볼 수 있습니다. 매우 동일한 컴퓨터 또는 호스팅 된 서버에서 아무런 변화가 없습니다! 그리고 그 코드는 string.split과 정규식을 사용하지 않습니다! –

+0

@Didier : 나는 독특하다고 생각하지만 특별한 지식이 없다고 주장합니다. 오해를 막아 준 많은 경험들 ... 그리고 나는 여기에 두 번째 이론을 가지고 있습니다. – Richard

+0

Richard Richard에게 "두 번째 이론"은 올바른 것이어야하며 행동의 차이점을 설명합니다. 따라서 문제를 해결하려면 문자열 바꾸기 (문자열, "ab |", "#")를 수행 한 다음 "#"char에 결과를 분할해야합니다. 제공된 "#"char 제공 구분자는 문자열의 어느 곳에도 존재하지 않으므로이 경우가 그렇습니다. 절대적으로 완벽한 것은 아니지만 일을 할 것입니다. –

2

입력 문자열이 같으면 콘솔 앱과 ASP.NET의 분할 방법이 동일하게 작동한다는 것을 거의 보장 할 수 있습니다.

출력이 올바르게 표시되지 않을 수 있습니까?

+0

안녕하세요, Richard는 매우 희귀 한 사람이셔야합니다. Microsoft 코드를 보장 할 수있는 사람입니까? LOL ... –