首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 2009 TStringBuilder 入門:Create 建構函數與基本用法

     編輯:Delphi

TStringBuilder:高效字串建構器

TStringBuilder 是 Delphi 2009 引入的可變字串緩衝區,對應 .NET StringBuilder。核心優勢:避免不可變字串的頻繁分配/複製,適合大量拼接、修改場景。

建構函數重載

建構函數參數用途
Create無空緩衝區,預設容量 16 字元
CreateCapacity: Integer指定初始容量 (字元數)
Createconst Value: string以字串初始化
Createconst Value: string; Capacity: Integer字串初始化 + 指定容量
CreateCapacity, MaxCapacity: Integer指定初始/最大容量

完整實作程式碼


procedure TForm1.Button1Click(Sender: TObject); // 無參數建構 + 連續 Append
var sb: TStringBuilder;
begin
  sb := TStringBuilder.Create;
  try
    sb.Append('Embarcadero');
    sb.Append(' CodeGear');
    sb.Append(' Delphi');
    sb.Append(' 2009');
    ShowMessage(sb.ToString); // 'Embarcadero CodeGear Delphi 2009'
  finally sb.Free; end;
end;

procedure TForm1.Button2Click(Sender: TObject); // 字串初始化建構
var sb: TStringBuilder;
begin
  sb := TStringBuilder.Create('Delphi ');
  try
    sb.Append(2009); // 整數直接追加
    ShowMessage(sb.ToString); // 'Delphi 2009'
  finally sb.Free; end;
end;

核心屬性與方法速查

成員類型說明
Length屬性 (讀寫)當前字元數。寫入 0 等同 Clear
Capacity屬性 (讀寫)內部緩衝區配置容量。擴容時自動成長 (通常 2倍)
MaxCapacity屬性 (唯讀)最大容量限制 (預設 2GB)
Chars[Index]索引器單字元讀寫 (0-based)
Append方法追加各類型值 (多重載)
AppendLine方法追加值 + 換行符
AppendFormat方法格式化追加
Insert方法指定位置插入
Remove方法指定位置刪除
Replace方法替換字元/字串
ToString方法輸出字串 (可指定區間)
Clear方法清空內容 (Length:=0)
EnsureCapacity方法確保最小容量
CopyTo方法複製區段到字元陣列
Equals方法內容相等比較

基本使用模式

1. 簡單拼接 (替代 + 操作)


// 傳統: s := 'A' + 'B' + 'C'; // 多次分配
// TStringBuilder:
var sb := TStringBuilder.Create;
try
  sb.Append('A').Append('B').Append('C'); // 鏈式呼叫
  Result := sb.ToString;
finally sb.Free; end;

2. 迴圈大量拼接 (效能關鍵)


function JoinStrings(const Items: array of string; const Sep: string): string;
var
  sb: TStringBuilder;
  i: Integer;
begin
  sb := TStringBuilder.Create(Length(Items) * 20); // 預估容量
  try
    for i := 0 to High(Items) do
    begin
      if i > 0 then sb.Append(Sep);
      sb.Append(Items[i]);
    end;
    Result := sb.ToString;
  finally sb.Free; end;
end;

3. 字串初始化建構


var sb := TStringBuilder.Create('Prefix_');
sb.Append(Suffix); // 直接在初始值基礎上擴展

4. 清空重用模式


var sb := TStringBuilder.Create(1000);
try
  for batch in Batches do
  begin
    sb.Length := 0; // 保留容量,快速清空
    BuildBatchString(sb, batch);
    Process(sb.ToString);
  end;
finally sb.Free; end;

效能對比:StringBuilder vs 字串拼接

場景String (+)TStringBuilder優勢倍數
100 次拼接~5000 字元複製~1000 字元複製5x
1000 次拼接~50萬字元複製~1萬字元複製50x
10000 次拼接~5000萬字元複製~10萬字元複製500x

結論:迴圈/大量拼接必須用 TStringBuilder。

記憶體管理規則

  • TStringBuilder 是類別,需手動 Free
  • 非介面型別,無參考計數,sb2 := sb1 為參考複製,同一實例
  • try...finally Free 模式是標準用法
  • 長期持有實例用 Length := 0 重用,避免反覆建構銷毀

常見新手錯誤與避坑

錯誤後果正確做法
忘記 Free記憶體洩漏永遠用 try...finally
以為 sb2 := sb1 是複製修改 sb1 影響 sb2需手動 sb2.Append(sb1.ToString) 複製內容
Capacity 當 Length 用邏輯錯誤Length = 實際字元數,Capacity = 配置緩衝區
小字串拼接也用 SB過度設計,可讀性下降少量拼接用 + 或 Format 即可

進階:自訂初始容量策略


function EstimateCapacity(const Items: array of string; AvgLen: Integer = 10): Integer;
begin
  Result := Length(Items) * (AvgLen + 2); // +2 for separator
  if Result < 16 then Result := 16; // 最小容量
end;

var sb := TStringBuilder.Create(EstimateCapacity(Items));

總結

TStringBuilder.Create 提供靈活建構:無參數、指定容量、字串初始化。掌握Length/Capacity 雙屬性語意、Append 鏈式呼叫、迴圈預分配容量、Length:=0 重用、try...finally Free 五大核心模式,即能從入門到精通,將字串處理效能提升數十倍,構建高效能 Delphi 應用程式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved