为什么string.Length不能处理text.Substring?

时间:2012-10-01 02:35:41

标签: c# asp.net-mvc string 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返回总字符数,为什么总是超出范围。我做错了吗?

3 个答案:

答案 0 :(得分:1)

应该是:

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

并替换

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

 end = text.Length - start;

答案 1 :(得分:1)

string.SubString的第二个参数是子串的长度。

在您的示例中,您说的是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)

答案 2 :(得分:1)

Substring()方法的第二个参数不是索引,而是长度。