@sa_ddam213's answer은 분명히이 문제를 해결하지만,이 특정 문자열에 대해 정확히 이해하는 데 도움이 될 수 있습니다.
다른 "특수 문자"로 예제를 시도해도 문제가 발생하지 않습니다.
string url1 = @"http://it.wikipedia.org/wiki/»Abd_Allāh_al-Sallāl";
Console.WriteLine(url1.LastIndexOf("it.wikipedia.org/wiki/")); // 7
string url2 = @"http://it.wikipedia.org/wiki/~Abd_Allāh_al-Sallāl";
Console.WriteLine(url2.LastIndexOf("it.wikipedia.org/wiki/")); // 7
문제의 문자, " '"는 spacing modifier letter1라고 예를 들어, 다음 문자열은 예상대로 작동합니다. 공백 수정 기호 문자는 독자적으로 서 있지 않지만 문자열의 이전의 문자 (이 경우 "/")를 수정합니다. 이것을 넣는 또 다른 방법은 렌더링 될 때 자신의 공간을 차지하지 않는다는 것입니다.
LastIndexOf
은 StringComparison
인수없이 호출 할 때 현재 문화권을 사용하여 문자열을 비교합니다.
문자열을 문화적으로 의미있는 방식으로 비교할 때 "/"및 " '"문자는 두 개의 별개 문자로 인식되지 않습니다. 문자가 한 문자로 처리되며 은 일치하지 않습니다. 매개 변수가 전달되었습니다. 에서 LastIndexOf
.
StringComparison.Ordinal
을 LastIndexOf
으로 전달하면 서수 비교의 특성상 문자가 별개로 취급됩니다.
이 작품은 CompareInfo.LastIndexOf
을 사용하고 CompareOptions.IgnoreNonSpace
옵션을 제공하는 것입니다 수 있도록하는 또 다른 방법 : 우리는 우리가 문자를 결합하여 우리의 문자열 비교에 포함하지 않을 말을하는지 여기
Console.WriteLine(
CultureInfo.CurrentCulture.CompareInfo.LastIndexOf(
wikiPageUrl, @"it.wikipedia.org/wiki/", CompareOptions.IgnoreNonSpace));
// 7
합니다. (!) 참고로
,이 캐릭터가 LastIndexOf
에 전달되는 검색 문자열에 표시되지 않는 문자에 적용되고 있기 때문에 @Partha's answer 및 @Noctis' answer 만 작동을 의미합니다.
대조적으로 Contains
메서드와 비교합니다.이 메서드는 기본적으로 서수 (대/소문자를 구분하고 의에 민감 함) 비교를 수행합니다. 이것은 Contains
이 true
을 반환하고 LastIndexOf
이 false
을 반환하는 이유를 설명합니다.
.NET 프레임 워크에서 문자열을 조작하는 방법에 대한 환상적인 개요는 this article을 확인하십시오.
1 : 이것은 결합 문자 다른인가 또는 문자를 조합의 유형입니까? 누군가가 저를 위해 그것을 정리한다면 감사 할 것입니다.
직접 C & P 인 경우 컴파일되지 않습니다. 직접 C & P가 아니라면 왜 안 되니? – John3136
예상대로 [10]을 반환합니다 ([demo] (http://ideone.com/qYl3sZ)). 투표가 재현 불가능으로 마감되었습니다. – dasblinkenlight
코드가 컴파일되지 않습니다. 나는 인용 부호가 유니 코드 문자라고 생각한다. – Hassan