今天在寫代碼的時候想實現一個字符串的反轉,於是上網搜資料想找找有沒有什麼簡便的方法。然後找到一篇文章比較詳細得分析了這個問題。其中就說到了String類與StringBuilder類的區別。
反轉字符串常見的一種錯誤的做法如下
static string Reverse(string str)
{
string strReturn = "";
foreach (char c in str)
{
strReturn = c + strReturn;
}
return strReturn;
}
要注意的是當執行strReturn = c + strReturn
這一步的時候 , 每次執行的時候都會申請一塊新的內存,然後將值複製到那塊內存,然後再執行賦值操作,內存浪費嚴重。所以正確的做法應該是使用StringBuilder類,要注意的是構造StringBuilder類時要指定初始容量,否則默認爲16個字符,並且當追加字符容量大於原有容量時,就會分配一塊大小是原緩衝區兩倍大小的緩衝區。所以反轉字符串其中一種做法如下:
public static string Reverse(string str)
{
if (string.IsNullOrEmpty(str))
{
throw new ArgumentException("參數不合法");
}
StringBuilder sb = new StringBuilder(str.Length);
for (int index = str.Length - 1; index >= 0; index--)
{
sb.Append(str[index]);
}
return sb.ToString();
}
總結,當有大量字符串疊加操作的時候應該使用StringBuilder類來進行實現。