2011-02-15 108 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是長度的子字符串,而不是最後一個字符的索引。