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