SubString StringBuilder c#

时间:2011-02-15 17:09:46

标签: c# exception stringbuilder

我正在尝试:

1  string pal = "Juan     1David     1Correa";
2  StringBuilder sb = new StringBuilder(pal);
3  Console.writeline( sb.ToString(0,9) );
4  Console.writeline( sb.ToString(10,14) );
5  Console.writeline( sb.ToString(15,26) );

但是在4行中它引发了异常。

为什么?

9 个答案:

答案 0 :(得分:26)

StringBuilder.ToString(int, int)的第二个参数表示所需子字符串的 length ,而不是其结束索引。

  

从中检索子字符串   实例。子串从a开始   指定的字符位置和有一个   指定长度。

例如,最后一个语句应该是:

Console.WriteLine(sb.ToString(15, 12));

另一方面,如果您只想从原始字符串中获取子字符串,则可以使用String.Substring(int, int)方法。

答案 1 :(得分:3)

第二个参数是长度,所以它应该是

Console.writeline( sb.ToString(10,5) );

答案 2 :(得分:2)

The docs明确指出当“startIndex和length的总和大于当前实例的长度时”将抛出ArgumentOutOfRangeException

答案 3 :(得分:1)

第二个参数是长度,但不是最后一个索引。所以在你的情况下15 + 26 = 41超出界限。

答案 4 :(得分:1)

第二个参数是长度,而不是“结束字符”。从10号开始找不到14个字符 - 因此错误。

答案 5 :(得分:1)

当我运行它时,在第5行抛出异常,这很有意义,因为输入字符串中没有足够的字符从15开始生成26个字符。

答案 6 :(得分:0)

首先你要记录我们你得到的异常,而不是让我们在黑暗中试图弄清楚自己,然后作为猜测,我会说你的字符串不包含超过24个字符......

答案 7 :(得分:0)

StringBuilder.ToString方法无法正常工作。参数是:

  1. startIndex :此实例中子字符串的起始位置。
  2. 长度:子字符串的长度。
  3. 所以你从索引15开始并试图获得接下来的26个字符,这超出了字符串的长度。

    可以找到文档here

答案 8 :(得分:0)

请仔细检查您的字符串中是否包含空格字符,而不是标签字符。这是您可以在 4 行上获得例外的唯一原因。但即使你的字符串包含空格,你 5 行上有一个例外,因为26是子字符串的长度,而不是最后一个字符的索引。