我正在尝试:
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行中它引发了异常。
为什么?
答案 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
方法无法正常工作。参数是:
所以你从索引15开始并试图获得接下来的26个字符,这超出了字符串的长度。
可以找到文档here。
答案 8 :(得分:0)
请仔细检查您的字符串中是否包含空格字符,而不是标签字符。这是您可以在 4 行上获得例外的唯一原因。但即使你的字符串包含空格,你将在 5 行上有一个例外,因为26是子字符串的长度,而不是最后一个字符的索引。