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号线,则抛出异常。
为什么?
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号线,则抛出异常。
为什么?
StringBuilder.ToString(int, int)
的第二个参数代表所需子字符串的长度长度,而不是其末尾索引。
从此 实例中检索子字符串。子字符串从 指定的字符位置开始,并且具有 指定的长度。
例如,过去的说法或许应该是:
Console.WriteLine(sb.ToString(15, 12));
在另一方面,如果你想要的是从原始字符串获得子串,你可以只使用String.Substring(int, int)
方法。
第二个参数是长度,但不是最后一个索引。所以在你的情况15 + 26 = 41这是超出界限。
The docs明确指出当“startIndex和length的和大于当前实例的长度”时,将抛出ArgumentOutOfRangeException
。
第二个参数是长度,而不是“结束字符”。它从10日开始无法找到14个字符 - 因此错误。
首先,你应该记录下你得到的例外,而不是让我们在黑暗中试图找出自己,然后作为猜测,我会说你的字符串不包含超过24个字符。 。
第二个参数是长度,所以它应该是
Console.writeline(sb.ToString(10,5));
当我运行此,抛出异常在第5行,这是非常合情合理的,因为有没有在你输入字符串的字符足以生成从15开始的26个字符。
StringBuilder.ToString
方法不能按照您的预期工作。参数如下:
因此,您将从索引15开始,尝试获取接下来的26个字符,这超出了字符串的长度。
该文档可以找到here。
请仔细检查您的字符串中是否包含空格字符,而不是标签字符。这是您可以在线有例外的唯一原因。但即使你的字符串包含空格将有一个例外在线因为26是长度的子字符串,而不是最后一个字符的索引。
抛出的异常是什么?这也让我觉得是StringBuilder的一个奇怪的用法,你想完成什么? – 2011-02-15 17:11:28