首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OutOfRangeException in StringBuilder.Remove()

OutOfRangeException in StringBuilder.Remove()
EN

Stack Overflow用户
提问于 2017-07-21 13:28:46
回答 2查看 431关注 0票数 1

我有一个字符串,它在第一个字符: space之后包含了许多无用的信息。因此,我构建了一个StringBuilder,在第一个空格之后删除不必要的字符。

代码语言:javascript
复制
public static string Remove(string text)
{
    int index1 = text.IndexOf(' ');
    int index2 = text.Lenght;
    StringBuilder sv = new StringBuilder(text.Lenght);
    sv.Append(text);
    sv.Remove(index1, index2);
    string text2 = sv.ToString();

    return text2;
}

有人能解释一下为什么这会给我带来错误吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-21 13:34:40

此异常的原因是您误解了第二个参数的用途:它没有指定结束索引,而是指定要删除的段的长度。

由于您的代码正在传递整个text字符串的长度,第一个参数的唯一有效输入将为零。若要传递适当的值,请从第二个索引中减去第一个索引,并将1添加到结果中。

注意:,看起来您正在从字符串中移除从第一个空格' '开始的所有内容。一种更简单的方法是使用子字符串:

代码语言:javascript
复制
int index = text.IndexOf(' ');
return index >= 0 ? text.Substring(0, index) : text;
票数 1
EN

Stack Overflow用户

发布于 2017-07-21 13:34:48

Remove表示,该方法只引发一个异常。

ArgumentOutOfRangeException:如果startIndex或length小于零,或者startIndex +长度大于此实例的长度。

所以有两件事发生了

  1. 您的字符串不包含空格(startIndex将小于零)
  2. startIndex+length大于字符串的总长度。

至关重要的是,使用您已经发布的代码,上面的1有时可能是真的,而2将永远是真的!您应该为第二个参数执行index2-index1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45238957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档