Aracılığıyla paylaş


.NET'te StringBuilder Sınıfını Kullanma

String Nesne sabittir. sınıfındaki yöntemlerden birini her kullandığınızda, bellekte System.String yeni bir dize nesnesi oluşturursunuz ve bu da bu yeni nesne için yeni bir alan ayırma gerektirir. Bir dizede yinelenen değişiklikler yapmanız gereken durumlarda, yeni String nesne oluşturmayla ilişkili ek yük yüksek maliyetli olabilir. Sınıfı, System.Text.StringBuilder yeni bir nesne oluşturmadan bir dizeyi değiştirmek istediğinizde kullanılabilir. Örneğin, sınıfını StringBuilder kullanmak, bir döngüde birçok dizeyi birleştirirken performansı artırabilir.

System.Text Ad Alanını İçeri Aktarma

StringBuilder sınıfı ad alanında System.Text bulunur. Kodunuzda tam tür adı sağlamak zorunda kalmamak için ad alanını System.Text içeri aktarabilirsiniz:

using namespace System;
using namespace System::Text;
using System;
using System.Text;
Imports System.Text

StringBuilder Nesnesi Örneği Oluşturma

Aşağıdaki örnekte gösterildiği gibi, değişkeninizi aşırı yüklenmiş oluşturucu yöntemlerinden biriyle başlatarak sınıfının yeni bir örneğini StringBuilder oluşturabilirsiniz.

StringBuilder^ myStringBuilder = gcnew StringBuilder("Hello World!");
StringBuilder myStringBuilder = new StringBuilder("Hello World!");
Dim myStringBuilder As New StringBuilder("Hello World!")

Kapasite ve Uzunluğu Ayarlama

, kapsüllediğiniz dizedeki karakter sayısını genişletmenize olanak tanıyan dinamik bir nesne olsa StringBuilder da, tutabileceği karakter sayısı üst sınırı için bir değer belirtebilirsiniz. Bu değer nesnenin kapasitesi olarak adlandırılır ve geçerli StringBuilder olan dizenin uzunluğuyla karıştırılmamalıdır. Örneğin, uzunluğu 5 olan "Hello" dizesiyle sınıfının yeni bir örneğini StringBuilder oluşturabilir ve nesnenin en fazla 25 kapasiteye sahip olduğunu belirtebilirsiniz. öğesini değiştirdiğinizde StringBuilder, kapasiteye ulaşılana kadar boyutu kendisi için yeniden ayırmaz. Bu durum oluştuğunda, yeni alan otomatik olarak ayrılır ve kapasite iki katına çıkar. Aşırı yüklenmiş oluşturuculardan birini kullanarak sınıfın kapasitesini StringBuilder belirtebilirsiniz. Aşağıdaki örnek, nesnenin myStringBuilder en fazla 25 alana genişletilebileceğini belirtir.

StringBuilder^ myStringBuilder = gcnew StringBuilder("Hello World!", 25);
StringBuilder myStringBuilder = new StringBuilder("Hello World!", 25);
Dim myStringBuilder As New StringBuilder("Hello World!", 25)

Ayrıca, nesnenizin uzunluk üst sınırını ayarlamak için okuma/yazma Capacity özelliğini kullanabilirsiniz. Aşağıdaki örnek, maksimum nesne uzunluğunu tanımlamak için Capacity özelliğini kullanır.

myStringBuilder->Capacity = 25;
myStringBuilder.Capacity = 25;
myStringBuilder.Capacity = 25

EnsureCapacity yöntemi geçerli StringBuilder'ın kapasitesini denetlemek için kullanılabilir. Kapasite geçirilen değerden büyükse hiçbir değişiklik yapılmaz; ancak kapasite geçirilen değerden küçükse geçerli kapasite geçirilen değerle eşleşecek şekilde değiştirilir.

Özelliği Length de görüntülenebilir veya ayarlanabilir. Length özelliğini Capacity özelliğinden daha büyük bir değere ayarlarsanız Capacity özelliği otomatik olarak Length özelliğiyle aynı değere değiştirilir. Length özelliğini geçerli StringBuilder içindeki dizenin uzunluğundan küçük bir değere ayarlamak dizeyi kısaltır.

StringBuilder Dizesini Değiştirme

Aşağıdaki tabloda, StringBuilder'ın içeriğini değiştirmek için kullanabileceğiniz yöntemler listelenir.

Yöntem adı Kullanma
StringBuilder.Append Bilgileri geçerli StringBuilder'ın sonuna ekler.
StringBuilder.AppendFormat Bir dizede geçirilen biçim belirticisini biçimlendirilmiş metinle değiştirir.
StringBuilder.Insert Geçerli StringBuilder'ın belirtilen dizinine bir dize veya nesne ekler.
StringBuilder.Remove Geçerli StringBuilder'dan belirtilen sayıda karakteri kaldırır.
StringBuilder.Replace Geçerli StringBuilder'da belirtilen bir karakterin veya dizenin tüm oluşumlarını belirtilen başka bir karakter veya dizeyle değiştirir.

Arkasına Ekle

Append yöntemi, geçerli StringBuilder tarafından temsil edilen bir dizenin sonuna bir nesnenin metin veya dize gösterimi eklemek için kullanılabilir. Aşağıdaki örnek, "Merhaba Dünya" için bir StringBuilder başlatır ve nesnenin sonuna bir metin ekler. Alan gerektiğinde otomatik olarak ayrılır.

StringBuilder^ myStringBuilder = gcnew StringBuilder("Hello World!");
myStringBuilder->Append(" What a beautiful day.");
Console::WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello World! What a beautiful day.
StringBuilder myStringBuilder = new StringBuilder("Hello World!");
myStringBuilder.Append(" What a beautiful day.");
Console.WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello World! What a beautiful day.
Dim myStringBuilder As New StringBuilder("Hello World!")
myStringBuilder.Append(" What a beautiful day.")
Console.WriteLine(myStringBuilder)
' The example displays the following output:
'       Hello World! What a beautiful day.

Appendformat

StringBuilder.AppendFormat yöntemi, nesnenin sonuna StringBuilder metin ekler. Biçimlendirilecek nesne veya nesnelerin uygulamasını çağırarak IFormattable bileşik biçimlendirme özelliğini destekler (daha fazla bilgi için bkz. Bileşik Biçimlendirme). Bu nedenle, sayısal, tarih ve saat ve numaralandırma değerleri için standart biçim dizelerini, sayısal ve tarih ve saat değerleri için özel biçim dizelerini ve özel türler için tanımlanan biçim dizelerini kabul eder. (Biçimlendirme hakkında bilgi için bkz. Biçimlendirme Türleri.) Değişkenlerin biçimini özelleştirmek ve bu değerleri bir StringBuilderöğesine eklemek için bu yöntemi kullanabilirsiniz. Aşağıdaki örnek, bir nesnenin AppendFormat sonuna StringBuilder para birimi değeri olarak biçimlendirilmiş bir tamsayı değeri yerleştirmek için yöntemini kullanır.

int MyInt = 25;
StringBuilder^ myStringBuilder = gcnew StringBuilder("Your total is ");
myStringBuilder->AppendFormat("{0:C} ", MyInt);
Console::WriteLine(myStringBuilder);
// The example displays the following output:
//       Your total is $25.00
int MyInt = 25;
StringBuilder myStringBuilder = new StringBuilder("Your total is ");
myStringBuilder.AppendFormat("{0:C} ", MyInt);
Console.WriteLine(myStringBuilder);
// The example displays the following output:
//       Your total is $25.00
Dim MyInt As Integer = 25
Dim myStringBuilder As New StringBuilder("Your total is ")
myStringBuilder.AppendFormat("{0:C} ", MyInt)
Console.WriteLine(myStringBuilder)
' The example displays the following output:
'     Your total is $25.00  

Ekleme

yöntemi geçerli InsertStringBuilder nesnede belirtilen konuma bir dize veya nesne ekler. Aşağıdaki örnek, bir nesnenin altıncı konumuna StringBuilder bir sözcük eklemek için bu yöntemi kullanır.

StringBuilder^ myStringBuilder = gcnew StringBuilder("Hello World!");
myStringBuilder->Insert(6,"Beautiful ");
Console::WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello Beautiful World!
StringBuilder myStringBuilder = new StringBuilder("Hello World!");
myStringBuilder.Insert(6,"Beautiful ");
Console.WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello Beautiful World!
Dim myStringBuilder As New StringBuilder("Hello World!")
myStringBuilder.Insert(6, "Beautiful ")
Console.WriteLine(myStringBuilder)
' The example displays the following output:
'      Hello Beautiful World!

Kaldır

Geçerli StringBuilder nesneden belirtilen sayıda karakteri, belirtilen sıfır tabanlı dizinden başlayarak kaldırmak için Remove yöntemini kullanabilirsiniz. Aşağıdaki örnek, bir StringBuilder nesneyi kısaltmak için Remove yöntemini kullanır.

StringBuilder^ myStringBuilder = gcnew StringBuilder("Hello World!");
myStringBuilder->Remove(5,7);
Console::WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello
StringBuilder myStringBuilder = new StringBuilder("Hello World!");
myStringBuilder.Remove(5,7);
Console.WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello
Dim myStringBuilder As New StringBuilder("Hello World!")
myStringBuilder.Remove(5, 7)
Console.WriteLine(myStringBuilder)
' The example displays the following output:
'       Hello

Replace

Replace yöntemi, nesne içindeki StringBuilder karakterleri belirtilen başka bir karakterle değiştirmek için kullanılabilir. Aşağıdaki örnek, bir StringBuilder nesnede ünlem işareti karakterinin (!) tüm örneklerini aramak ve bunları soru işareti karakteri (?) ile değiştirmek için Replace yöntemini kullanır.

StringBuilder^ myStringBuilder = gcnew StringBuilder("Hello World!");
myStringBuilder->Replace('!', '?');
Console::WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello World?
StringBuilder myStringBuilder = new StringBuilder("Hello World!");
myStringBuilder.Replace('!', '?');
Console.WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello World?
Dim myStringBuilder As New StringBuilder("Hello World!")
myStringBuilder.Replace("!"c, "?"c)
Console.WriteLine(myStringBuilder)
' The example displays the following output:
'       Hello World?

StringBuilder Nesnesini Dizeye Dönüştürme

Nesnesi tarafından StringBuilderStringBuilder temsil edilen dizeyi parametresi olan bir String yönteme geçirebilmeniz veya kullanıcı arabiriminde görüntüleyebilmeniz için önce nesneyi bir String nesneye dönüştürmeniz gerekir. Yöntemini çağırarak bu dönüştürmeyi StringBuilder.ToString yaparsınız. Aşağıdaki örnek bir dizi StringBuilder yöntemi çağırır ve ardından dizeyi StringBuilder.ToString() görüntülemek için yöntemini çağırır.

using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      StringBuilder sb = new StringBuilder();
      bool flag = true;
      string[] spellings = { "recieve", "receeve", "receive" };
      sb.AppendFormat("Which of the following spellings is {0}:", flag);
      sb.AppendLine();
      for (int ctr = 0; ctr <= spellings.GetUpperBound(0); ctr++) {
         sb.AppendFormat("   {0}. {1}", ctr, spellings[ctr]);
         sb.AppendLine();
      }
      sb.AppendLine();
      Console.WriteLine(sb.ToString());
   }
}
// The example displays the following output:
//       Which of the following spellings is True:
//          0. recieve
//          1. receeve
//          2. receive
Imports System.Text

Module Example
    Public Sub Main()
        Dim sb As New StringBuilder()
        Dim flag As Boolean = True
        Dim spellings() As String = {"recieve", "receeve", "receive"}
        sb.AppendFormat("Which of the following spellings is {0}:", flag)
        sb.AppendLine()
        For ctr As Integer = 0 To spellings.GetUpperBound(0)
            sb.AppendFormat("   {0}. {1}", ctr, spellings(ctr))
            sb.AppendLine()
        Next
        sb.AppendLine()
        Console.WriteLine(sb.ToString())
    End Sub
End Module
' The example displays the following output:
'       Which of the following spellings is True:
'          0. recieve
'          1. receeve
'          2. receive

Ayrıca bkz.