-2

我正在尝试提取字符串的前 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

4 回答 4

12

它超出范围,因为您的字符串短于 200 个字符

为了补救,您可以使用Math.Min它将选择字符串长度和 200 之间的较低值。

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

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

于 2015-06-17T15:00:41.820 回答
1

这可能是因为字符串中的单词少于 200 个,并且可能来自GetIndex返回的值i大于fullarticle. 作为错误的一个例子

"s".Substring(0,2)

投掷

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

如果您的意图是获取字符串中的前 200 个单词,则需要检查

  1. 字符串不为空
  2. 字符串中的单词数;如果少于 200 字,那应该是您的最大索引,否则使用 200。
  3. 基于 2 的子字符串。
于 2013-02-14T18:31:49.277 回答
1

假设错误来自string.Substring似乎是安全的。假设您在startIndex + length > given.LengthorstartIndex < 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));
}
于 2013-02-14T18:52:39.980 回答
0

看起来 i 大于整个全文长度。检查您的 GetIndex 函数。

于 2013-02-14T18:31:17.223 回答