我正在尝试提取字符串的前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);
我该如何解决这个问题?
答案 0 :(得分:8)
当字符串短于200个字符时,它超出范围
要解决问题,您可以使用Math.Min
,它会在字符串长度和200之间选择较低的值。
fullarticle.Substring(0, Math.Min(fullarticle.Length, 200));
希望这可以节省你一些时间。
答案 1 :(得分:2)
假设错误来自string.Substring似乎是安全的。鉴于您在startIndex + length > given.Length
或startIndex < 0
或length < 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个单词,则需要检查
答案 3 :(得分:0)
看起来我比整个fullarticle长度更大。检查你的GetIndex函数。