StringBuilder使用小結

00潤物無聲00發表於2015-12-27

    StringBuilder:一個可變的字元序列。此類提供一個與 StringBuffer 相容的 API,但不保證同步。該類被設計用作 StringBuffer 的一個簡易替換,用在字串緩衝區被單個執行緒使用的時候。

    StringBuilderStringBuffer在實現中更快,在StringBuilder上主要操作的是append insert方法。將給定的資料轉換成字串,將字串的字元新增或插入到字串生成器中。append 方法始終將這些字元新增到生成器的末端;而insert 方法則在指定的點新增字元。當在一個迴圈中將許多字串連線在一起時,使用 StringBuilder 類可以提升效能


StringBuilder使用

    引用System.Text;

    StringBuilder strSql = new StringBuilder();

    可以使用讀/寫 Capacity 屬性來設定物件的最大長度。strSql.Capacity = 10;


常用的方法:

    Append方法:將文字或物件的字串表示形式新增到由當前 StringBuilder 物件表示的字串的結尾處。

    一個更新的sql語句。它的效果和一條sql語句是一樣的。

        /// <summary>
        /// 更新一條資料,上傳述職報告等資訊;-2015年12月26日範曉權修改;
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public bool UpdateWord(EvaluationSystem.Model.CadresRateEntity model)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("update T_CadresRate set ");
            strSql.Append("CadresName =@CadresName,");
            strSql.Append("UnitClass = @UnitClass,");
            strSql.Append("UnitName = @UnitName,");
            strSql.Append("Year= @Year,");
            strSql.Append("ReportName=@ReportName,");
            strSql.Append("ReportAdress = @ReportAdress,");
            strSql.Append("AssessmentResult = @AssessmentResult,");
            strSql.Append("Punishment = @Punishment,");
            strSql.Append("UserName =@UserName,");
            strSql.Append("Status=@Status");
            strSql.Append(" where CadresID=@CadresID");
            SqlParameter[] parameters = {
                    new SqlParameter("@CadresName", SqlDbType.Text ),
                    new SqlParameter("@UnitClass", SqlDbType.Text ),
                    new SqlParameter("@UnitName",SqlDbType.VarChar,100),
                    new SqlParameter("@Year",SqlDbType.VarChar,50),                   
                    new SqlParameter("@ReportName",SqlDbType.VarChar,100),
                    new SqlParameter("@ReportAdress",SqlDbType.Text),
                    new SqlParameter("@AssessmentResult",SqlDbType.VarChar,50),
                    new SqlParameter("@Punishment",SqlDbType.Text),
                    new SqlParameter("@UserName",SqlDbType.VarChar,50),
                    new SqlParameter("@Status",SqlDbType.VarChar,50),
                    new SqlParameter("@CadresID",SqlDbType.VarChar,100)};            
            parameters[0].Value = model.CadresName;
            parameters[1].Value = model.UnitClass;
            parameters[2].Value = model.UnitName;
            parameters[3].Value = model.Year;
            parameters[4].Value = model.ReportName;
            parameters[5].Value = model.ReportAdress;
            parameters[6].Value = model.AssessmentResult;
            parameters[7].Value = model.Punishment;
            parameters[8].Value = model.UserName;
            parameters[9].Value = model.Status;
            parameters[10].Value = model.CadresID;
            int rows = DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);
            if (rows > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        

    insert方法可以實現與Append一樣的效果。

        StringBuilder strSql = new StringBuilder();
	strSql.Insert(strSql.length(),"fxq");


    Remove 方法:方法從當前 StringBuilder 中移除指定數量的字元

        StringBuilder strSql = new StringBuilder();
	strSql.Remove(3,4);      //從第3個位置開始,刪除4個字串;

    Replace方法:用另一個指定的字元來替換StringBuilder物件內的字元。使用Replace方法來搜尋物件,查詢所有的感嘆號字元,並用問號字元來替換它們。

<span style="font-family:SimSun;">     StringBuilder strSql = new StringBuilder("Hello World!");
     strSql.Replace('!', '?');  //替換;</span>

    String 或 StringBuilder 物件的串聯操作的效能取決於記憶體分配的發生頻率。String 串聯操作每次都分配記憶體,而 StringBuilder 串聯操作僅當 StringBuilder 物件緩衝區太小而無法容納新資料時才分配記憶體。因此,如果串聯固定數量的 String 物件,則 String 類更適合串聯操作。這種情況下,編譯器甚至會將各個串聯操作組合到一個操作中。如果串聯任意數量的字串,則 StringBuilder 物件更適合串聯操作;例如,某個迴圈對使用者輸入的任意數量的字串進行串聯。

相關文章