我有一个字符串,它在第一个字符: space之后包含了许多无用的信息。因此,我构建了一个StringBuilder,在第一个空格之后删除不必要的字符。
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;
}有人能解释一下为什么这会给我带来错误吗?谢谢!
发布于 2017-07-21 13:34:40
此异常的原因是您误解了第二个参数的用途:它没有指定结束索引,而是指定要删除的段的长度。
由于您的代码正在传递整个text字符串的长度,第一个参数的唯一有效输入将为零。若要传递适当的值,请从第二个索引中减去第一个索引,并将1添加到结果中。
注意:,看起来您正在从字符串中移除从第一个空格' '开始的所有内容。一种更简单的方法是使用子字符串:
int index = text.IndexOf(' ');
return index >= 0 ? text.Substring(0, index) : text;发布于 2017-07-21 13:34:48
Remove表示,该方法只引发一个异常。
ArgumentOutOfRangeException:如果startIndex或length小于零,或者startIndex +长度大于此实例的长度。
所以有两件事发生了
startIndex将小于零)startIndex+length大于字符串的总长度。至关重要的是,使用您已经发布的代码,上面的1有时可能是真的,而2将永远是真的!您应该为第二个参数执行index2-index1。
https://stackoverflow.com/questions/45238957
复制相似问题