2011-02-15 107 views
7

我想:字符串StringBuilder的C#

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

抛出的异常是什么?这也让我觉得是StringBuilder的一个奇怪的用法,你想完成什么? – 2011-02-15 17:11:28

回答

26

StringBuilder.ToString(int, int)的第二个参数代表所需子字符串的长度长度,而不是其末尾索引。

从此 实例中检索子字符串。子字符串从 指定的字符位置开始,并且具有 指定的长度。

例如,过去的说法或许应该是:

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

在另一方面,如果你想要的是从原始字符串获得子串,你可以只使用String.Substring(int, int)方法。

+0

那么,我该怎么做一个子字符?如果我使用子字符串,它发生在同一 – Caipivara 2011-02-15 17:13:10

+0

非常感谢:),我将不得不学习如何阅读:P – Caipivara 2011-02-15 17:17:32

+1

@Daniel GR:要纠正你的最后一条语句,如果你使用`Substring`,你可以尝试`Console .WriteLine(sb.ToString()。Substring(15));` – 2011-02-15 17:19:40

1

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

2

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

1

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

0

首先,你应该记录下你得到的例外,而不是让我们在黑暗中试图找出自己,然后作为猜测,我会说你的字符串不包含超过24个字符。 。

3

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

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

当我运行此,抛出异常在第5行,这是非常合情合理的,因为有没有在你输入字符串的字符足以生成从15开始的26个字符。

0

StringBuilder.ToString方法不能按照您的预期工作。参数如下:

  1. 的startIndex:在这种情况下的子串的起始位置。
  2. 长度:子串的长度。

因此,您将从索引15开始,尝试获取接下来的26个字符,这超出了字符串的长度。

该文档可以找到here

0

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