回答
您可以使用.ToString()
從StringBuilder
得到String
。
使用StringBuilder完成處理後,使用ToString方法返回最終結果。
從MSDN:
using System;
using System.Text;
public sealed class App
{
static void Main()
{
// Create a StringBuilder that expects to hold 50 characters.
// Initialize the StringBuilder with "ABC".
StringBuilder sb = new StringBuilder("ABC", 50);
// Append three characters (D, E, and F) to the end of the StringBuilder.
sb.Append(new char[] { 'D', 'E', 'F' });
// Append a format string to the end of the StringBuilder.
sb.AppendFormat("GHI{0}{1}", 'J', 'k');
// Display the number of characters in the StringBuilder and its string.
Console.WriteLine("{0} chars: {1}", sb.Length, sb.ToString());
// Insert a string at the beginning of the StringBuilder.
sb.Insert(0, "Alphabet: ");
// Replace all lowercase k's with uppercase K's.
sb.Replace('k', 'K');
// Display the number of characters in the StringBuilder and its string.
Console.WriteLine("{0} chars: {1}", sb.Length, sb.ToString());
}
}
// This code produces the following output.
//
// 11 chars: ABCDEFGHIJk
// 21 chars: Alphabet: ABCDEFGHIJK
我只想拋出這可能不一定更快,它肯定會有更好的內存佔用。這是因爲字符串在.NET中是不可變的,每次更改字符串時都會創建一個新字符串。
連接速度並不快 - 正如smaclell指出的那樣,問題是不可變的字符串強制對現有數據進行額外的分配和重新複製。
「一」 +「B」 +「c」是無更快與字符串生成器做的,但與中間的字符串越來越快作爲CONCAT年代#獲取重複concats像較大:
X = 「一個」; X + = 「B」; X + = 「C」; ...
關於它是更快/更好的內存:
我看着這個問題與Java,我認爲.NET是因爲聰明一點。
String的實現非常令人印象深刻。
String對象磁道「長度」和「共享」(獨立保持所述串陣列的長度的)
因此,像
String a = "abc" + "def" + "ghi";
可以被實現(由編譯器/運行時間)爲:
- Extend the array holding "abc" by 6 additional spaces. - Copy def in right after abc - copy ghi in after def. - give a pointer to the "abc" string to a - leave abc's length at 3, set a's length to 9 - set the shared flag in both.
由於大多數字符串都是短暫的,所以在很多情況下這會產生一些非常高效的代碼。 它絕對不是有效的情況是,當你在一個循環中添加一個字符串,或者當你的代碼是這樣的:
a = "abc";
a = a + "def";
a += "ghi";
在這種情況下,你是好得多使用StringBuilder的構造。
我的觀點是,無論何時優化,您都應該小心,除非絕對確定您知道自己在做什麼,並且您絕對確定這是必要的,並且您會測試以確保優化的代碼使用例通過,只需以最可讀的方式對其進行編碼,而不要試圖想出編譯器。
在查看字符串源代碼之前,我浪費了3天的時間與字符串混合,緩存/重用字符串構建器和測試速度,並發現編譯器已經做得比我的用例更好。然後,我必須解釋我是如何不知道自己在做什麼,我只以爲我做了...
當你說「串聯字符串與字符串生成器連接更快」時,只有當你是重複(我重複 - 重複)連接到同一個對象。
如果您只是串聯2個字符串並立即將結果做爲string
,則使用StringBuilder
沒有意義。
我只是無意中發現這個喬恩斯基特真好寫了起來:http://www.yoda.arachsys.com/csharp/stringbuilder.html
如果使用StringBuilder
,然後拿到造成string
,它只是一個調用ToString()
(意料之中)的問題。
- 1. 如何在iOS上獲得最終的HTML字符串
- 2. 如何獲取最後一個字符串附加到StringBuilder?
- 3. 如何獲得字符串的最後一個字符,XSLT
- 4. 如何修剪StringBuilder的字符串?
- 5. 最終字符串[]和最終字符串
- 6. Javascript比較字符串並獲得最終差異
- 7. 字符串StringBuilder的C#
- 8. 如何獲得字符串的最後一個字母
- 9. 如何獲得兩個字符串之間最重複的子字符串?
- 10. C#:如何獲得字符串中的字符串的長度[]
- 11. 如何獲得特定的字符串形式的字符串
- 12. 如何獲得我給出的字符串後的字符串?
- 13. 如何獲得最佳數字格式字符串?
- 14. 用StringBuilder替換字符串?
- 15. StringBuilder字符串格式
- 16. 如何獲得字符串的寬度
- 17. 如何獲得字符串的長度[] []
- 18. 如何獲得的子字符串中
- 19. 如何獲得字符串的CharSequence
- 20. 如何獲得String []中的字符串?
- 21. 刪除字符串如果最終字符串匹配給定的字符串
- 22. Ruby在字符串中獲得最後* *
- 23. 如何獲得子字符串在iPhone中的字符串?
- 24. 如何獲得字符串後的字符串oracle
- 25. 如何獲得特定字符串後的字符串?
- 26. 如何獲得「括號內」字符串中的字符串?
- 27. 如何獲得Emacs Lisp中字符串的子字符串?
- 28. 如何獲得給定字符串後的子字符串
- 29. 如何從字符串列表獲得最大的價值值
- 30. 如何獲得數組中數值最大的字符串?