2012-10-01 2 views
0

주어진 단어 뒤에 문자열을 가져 오려고합니다. 아래는 코드입니다.string.Length가 text.Substring에서 작동하지 않는 이유는 무엇입니까?

private static string GetStringAfterWord(string text, int position) 
    { 
     if (text.Length - 1 < position || text[position] == ' ') return null; 

     int start = position; 
     int end = position; 

     while (end < text.Length - 1) 
     end++; 

     return text.Substring(start, end); 

    } 

이 코드는 항상 날이 오류를 줄 : System.ArgumentOutOfRangeException이를 : 인덱스 및 길이는 문자열 내의 위치를 ​​참조해야합니다.

string.Length가 총 문자 수를 반환하지 않으며 항상 범위를 벗어나는 이유는 무엇입니까? 내가 잘못 했니?

답변

1

string.SubString의 두 번째 인수로

while (end < text.Length - 1) 
    end++; 

을 대체하는 문자열의 길이입니다.

예를 들어, grab the string starting at <start> and is <end> characters long입니다. start이 2이고 문자열의 길이가 11이면 end은 10이됩니다. 함께 추가하면 12 (10 + 2 = 12 .. 문자열의 길이가 11 인 동안)가됩니다.

return text.Substring(start, end - start); 

.. 그리고이 :

당신이 필요

while (end < text.Length) 
1

그것은해야한다 :

if (text.Length - 1 < position || position < 0 || text[position] == ' ') 

그리고

end = text.Length - start; 
1

Substring() 방법의 두번째 인수가 인덱스되지 않습니다, 그것은 길이입니다.

관련 문제