【问题标题】:"Index and length must refer to a location within the string" error“索引和长度必须引用字符串中的位置”错误
【发布时间】:2013-02-14 18:29:16
【问题描述】:

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

我该如何解决这个问题?

【问题讨论】:

  • 你说你想要200字。如果您的字符串少于 200 个单词会怎样?能否展示GetIndex的代码?

标签: c# string indexing


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案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));
    }
    

    【讨论】:

      【解决方案3】:

      这可能是因为字符串中的单词少于 200 个并且可能来自 GetIndex 返回的 i 的值大于 fullarticle 中的字符数。以错误为例

      "s".Substring(0,2)
      

      抛出

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

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

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

      【讨论】:

      • 我将它降低到 150,但我仍然得到:索引和长度必须引用字符串中的位置。参数名称:长度
      • 代码不是试图获取 200 个字符,而是试图获取 200 个单词。此外,您解决错误的方法很糟糕,请参阅我对史蒂夫回答的评论。
      • @KonradRudolph 我的错,我错误地认为 OP 意味着字符 :) 已更新。关于隐藏错误,我认为这取决于方法正在做什么背后的意图以及可以对输入做出的假设。在某些情况下,我同意隐藏错误可能很糟糕,在其他情况下我不同意:)
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-22
        • 2016-03-15
        • 1970-01-01
        • 1970-01-01
        • 2012-06-24
        相关资源
        最近更新 更多