“索引和长度必须引用字符串中的位置”错误

时间:2013-02-14 18:29:17

标签: c# string indexing

我正在尝试提取字符串的前200个单词,有时我会收到以下错误:

"Index and length must refer to a location within the string. Parameter name: length"

代码是:

int i = GetIndex(fullarticle, 200);
string result = fullarticle.Substring(0, i);

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:8)

当字符串短于200个字符时,它超出范围

要解决问题,您可以使用Math.Min,它会在字符串长度和200之间选择较低的值。

fullarticle.Substring(0, Math.Min(fullarticle.Length, 200));

希望这可以节省你一些时间。

答案 1 :(得分:2)

假设错误来自string.Substring似乎是安全的。鉴于您在startIndex + length > given.LengthstartIndex < 0length < 0时收到此错误,GetIndex要么返回大于fullarticle.Length的值,要么返回负数。 GetIndex中存在错误,因此如果您希望继续使用您拥有的代码,则应发布GetIndex代码以获得最佳答案。

如果你想要不同的东西,你可以试试这个:

static string GetShortIntroduction(string phrase, int words)
{
    // simple word count assuming spaces represent word boundaries
    return string.Join(" ", phrase.Split().Take(words));
}

答案 2 :(得分:1)

可能会发生这种情况,因为字符串中包含的字数少于200个,可能来自GetIndex,但i的值大于fullarticle中的字符数。作为错误的一个例子

"s".Substring(0,2)

引发

  

ArgumentOutOfRangeException:索引和长度必须引用字符串中的位置。   参数名称:长度

如果您想要达到字符串中的前200个单词,则需要检查

  1. 字符串不为空
  2. 字符串中的字数;如果它少于200个单词,那应该是你的最大索引,否则使用200。
  3. substring基于2。

答案 3 :(得分:0)

看起来我比整个fullarticle长度更大。检查你的GetIndex函数。