StringBuilder Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Değiştirilebilir karakter dizesini temsil eder. Bu sınıf devralınamaz.
public ref class StringBuilder sealed
public ref class StringBuilder sealed : System::Runtime::Serialization::ISerializable
public sealed class StringBuilder
public sealed class StringBuilder : System.Runtime.Serialization.ISerializable
[System.Serializable]
public sealed class StringBuilder
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class StringBuilder : System.Runtime.Serialization.ISerializable
type StringBuilder = class
type StringBuilder = class
interface ISerializable
[<System.Serializable>]
type StringBuilder = class
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type StringBuilder = class
interface ISerializable
Public NotInheritable Class StringBuilder
Public NotInheritable Class StringBuilder
Implements ISerializable
- Devralma
-
StringBuilder
- Öznitelikler
- Uygulamalar
Örnekler
Aşağıdaki örnekte, sınıfı tarafından tanımlanan yöntemlerin birçoğunun nasıl çağrıldığı gösterilmektedir StringBuilder .
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
open System.Text
// Create a StringBuilder that expects to hold 50 characters.
// Initialize the StringBuilder with "ABC".
let sb = StringBuilder("ABC", 50)
// Append three characters (D, E, and F) to the end of the StringBuilder.
sb.Append [| 'D'; 'E'; 'F' |] |> ignore
// Append a format string to the end of the StringBuilder.
sb.AppendFormat("GHI{0}{1}", 'J', 'k') |> ignore
// Display the number of characters in the StringBuilder and its string.
printfn $"{sb.Length} chars: {sb}"
// Insert a string at the beginning of the StringBuilder.
sb.Insert(0, "Alphabet: ") |> ignore
// Replace all lowercase k's with uppercase K's.
sb.Replace('k', 'K') |> ignore
// Display the number of characters in the StringBuilder and its string.
printfn $"{sb.Length} chars: {sb}"
// This code produces the following output.
//
// 11 chars: ABCDEFGHIJk
// 21 chars: Alphabet: ABCDEFGHIJK
Imports System.Text
Public Module App
Public Sub Main()
' Create a StringBuilder that expects to hold 50 characters.
' Initialize the StringBuilder with "ABC".
Dim sb As New StringBuilder("ABC", 50)
' Append three characters (D, E, and F) to the end of the StringBuilder.
sb.Append(New Char() {"D"c, "E"c, "F"c})
' Append a format string to the end of the StringBuilder.
sb.AppendFormat("GHI{0}{1}", "J"c, "k"c)
' 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())
End Sub
End Module
' This code produces the following output.
'
' 11 chars: ABCDEFGHIJk
' 21 chars: Alphabet: ABCDEFGHIJK
Açıklamalar
sınıfı, StringBuilder değeri değiştirilebilir bir karakter dizisi olan dize benzeri bir nesneyi temsil eder.
StringBuilder ile Dize türü karşılaştırması
Ve StringBuilder her ikisi de karakter dizilerini temsil etmesine rağmenString, bunlar farklı şekilde uygulanır. String sabit bir türdür. Yani, bir String nesneyi değiştirmek için görünen her işlem aslında yeni bir dize oluşturur.
Örneğin, aşağıdaki C# örneğindeki String.Concat yöntemine yapılan çağrı, value adlı bir dize değişkeninin değerini değiştirmiş gibi görünür. Aslında, Concat yöntemine geçirilen value nesnesinden farklı bir değere ve adrese sahip bir value nesnesi döndürür. Örneğin derleyici seçeneği kullanılarak /unsafe derlenmiş olması gerektiğini unutmayın.
using System;
public class Example7
{
public unsafe static void Main()
{
string value = "This is the first sentence" + ".";
fixed (char* start = value)
{
value = String.Concat(value, "This is the second sentence. ");
fixed (char* current = value)
{
Console.WriteLine(start == current);
}
}
}
}
// The example displays the following output:
// False
let mutable value = "This is the first sentence" + "."
use start = fixed value
value <- System.String.Concat(value, "This is the second sentence. ")
use current = fixed value
printfn $"{start = current}"
// The example displays the following output:
// False
Kapsamlı dize işlemesi gerçekleştiren yordamlar için (bir dizeyi döngüde birçok kez değiştiren uygulamalar gibi), bir dizeyi tekrar tekrar değiştirmek önemli bir performans cezasına neden olabilir. Alternatif olarak, değiştirilebilir bir dize sınıfı olan öğesini kullanabilirsiniz StringBuilder. Mutability, sınıfın bir örneği oluşturulduktan sonra karakter ekleme, kaldırma, değiştirme veya ekleme işlemi yaparak değiştirilebileceği anlamına gelir.
Important
StringBuilder sınıfı genellikle String sınıfından daha iyi performans sunsa da, dizeleri işlemek istediğinizde String yerine otomatik olarak StringBuilder kullanmamalısınız. Performans, dizenin boyutuna, yeni dize için ayrılacak bellek miktarına, kodunuzun yürütülmekte olduğu sisteme ve işlem türüne bağlıdır. Gerçekten önemli bir performans artışı sunup sağlamadığını StringBuilder belirlemek için kodunuzu test etmeye hazırlıklı olmalısınız.
sınıfını String şu koşullar altında kullanmayı göz önünde bulundurun:
- Kodunuzun bir dizede yapacağı değişikliklerin sayısı az olduğunda. Bu durumlarda, StringBuilder, String üzerinde ihmal edilebilir düzeyde veya hiç performans geliştirmesi sunmayabilir.
- Sabit sayıda birleştirme işlemi gerçekleştirdiğinizde, özellikle dize sabitleriyle. Bu durumda, derleyici birleştirme işlemlerini tek bir işlemde birleştirebilir.
- Dizenizi oluştururken kapsamlı arama işlemleri yapmanız gerektiğinde. sınıfında StringBuilder veya
IndexOfgibiStartsWitharama yöntemleri yok. Bu işlemler için StringBuilder nesnesini String öğesine dönüştürmeniz gerekir ve bu, StringBuilder kullanarak elde edilen performans avantajını olumsuz etkileyebilir. Daha fazla bilgi için StringBuilder nesnesindeki metni arama bölümüne bakın.
sınıfını StringBuilder şu koşullar altında kullanmayı göz önünde bulundurun:
- Kodunuzun tasarım zamanında bir dizede bilinmeyen sayıda değişiklik yapmasını beklediğiniz zaman (örneğin, kullanıcı girişi içeren rastgele sayıda dizeyi birleştirmek için bir döngü kullandığınızda).
- Kodunuzun bir dizede önemli sayıda değişiklik yapmasını beklediğiniz durumlarda.
StringBuilder nasıl çalışır?
özelliği, StringBuilder.Length nesnenin şu anda içerdiği karakter StringBuilder sayısını gösterir. Nesneye karakter eklerseniz, nesnenin StringBuilder içerebileceği karakter sayısını tanımlayan özelliğin StringBuilder.Capacity boyutuna eşit olana kadar uzunluğu artar. Eklenen karakter sayısı nesnenin uzunluğunun StringBuilder geçerli kapasitesini aşmasına neden olursa, yeni bellek ayrılır, özelliğin Capacity değeri ikiye katlanır, nesneye StringBuilder yeni karakterler eklenir ve Length özelliği ayarlanır. StringBuilder nesnesi için ek bellek, StringBuilder.MaxCapacity özelliği tarafından tanımlanan değere ulaşana kadar dinamik olarak ayrılır. Maksimum kapasiteye ulaşıldığında, nesne için StringBuilder başka bellek ayrılamıyor ve karakter eklemeye veya maksimum kapasitenin ötesine genişletmeye çalışmak bir ArgumentOutOfRangeException veya bir OutOfMemoryException özel durum oluşturur.
Aşağıdaki örnekte, nesneye atanan dize genişledikçe nesnenin StringBuilder yeni bellek ayırması ve kapasitesini dinamik olarak artırması gösterilmektedir. Kod, varsayılan (parametresiz) oluşturucusunu çağırarak bir StringBuilder nesne oluşturur. Bu nesnenin varsayılan kapasitesi 16 karakterdir ve maksimum kapasitesi 2 milyar karakterden fazladır. Dize uzunluğu (19 karakter) nesnenin varsayılan kapasitesini aştığı için "Bu bir tümcedir" dizesi eklendiğinde yeni bir bellek ayırması StringBuilder elde edilir. Nesnenin kapasitesi 32 karaktere iki katına çıkarır, yeni dize eklenir ve nesnenin uzunluğu artık 19 karaktere eşit olur. Kod daha sonra nesnenin değerine 11 kez "Bu ek bir cümledir" dizesini StringBuilder ekler. Ekleme işlemi nesnenin uzunluğunun StringBuilder kapasitesini aşmasına neden olduğunda, var olan kapasitesi ikiye katlanır ve Append işlem başarılı olur.
using System;
using System.Reflection;
using System.Text;
public class Example4
{
public static void Main()
{
StringBuilder sb = new StringBuilder();
ShowSBInfo(sb);
sb.Append("This is a sentence.");
ShowSBInfo(sb);
for (int ctr = 0; ctr <= 10; ctr++)
{
sb.Append("This is an additional sentence.");
ShowSBInfo(sb);
}
}
private static void ShowSBInfo(StringBuilder sb)
{
foreach (var prop in sb.GetType().GetProperties())
{
if (prop.GetIndexParameters().Length == 0)
Console.Write("{0}: {1:N0} ", prop.Name, prop.GetValue(sb));
}
Console.WriteLine();
}
}
// The example displays the following output:
// Capacity: 16 MaxCapacity: 2,147,483,647 Length: 0
// Capacity: 32 MaxCapacity: 2,147,483,647 Length: 19
// Capacity: 64 MaxCapacity: 2,147,483,647 Length: 50
// Capacity: 128 MaxCapacity: 2,147,483,647 Length: 81
// Capacity: 128 MaxCapacity: 2,147,483,647 Length: 112
// Capacity: 256 MaxCapacity: 2,147,483,647 Length: 143
// Capacity: 256 MaxCapacity: 2,147,483,647 Length: 174
// Capacity: 256 MaxCapacity: 2,147,483,647 Length: 205
// Capacity: 256 MaxCapacity: 2,147,483,647 Length: 236
// Capacity: 512 MaxCapacity: 2,147,483,647 Length: 267
// Capacity: 512 MaxCapacity: 2,147,483,647 Length: 298
// Capacity: 512 MaxCapacity: 2,147,483,647 Length: 329
// Capacity: 512 MaxCapacity: 2,147,483,647 Length: 360
open System.Text
let showSBInfo (sb: StringBuilder) =
for prop in sb.GetType().GetProperties() do
if prop.GetIndexParameters().Length = 0 then
printf $"{prop.Name}: {prop.GetValue sb:N0} "
printfn ""
let sb = StringBuilder()
showSBInfo sb
sb.Append "This is a sentence." |> ignore
showSBInfo sb
for i = 0 to 10 do
sb.Append "This is an additional sentence." |> ignore
showSBInfo sb
// The example displays the following output:
// Capacity: 16 MaxCapacity: 2,147,483,647 Length: 0
// Capacity: 32 MaxCapacity: 2,147,483,647 Length: 19
// Capacity: 64 MaxCapacity: 2,147,483,647 Length: 50
// Capacity: 128 MaxCapacity: 2,147,483,647 Length: 81
// Capacity: 128 MaxCapacity: 2,147,483,647 Length: 112
// Capacity: 256 MaxCapacity: 2,147,483,647 Length: 143
// Capacity: 256 MaxCapacity: 2,147,483,647 Length: 174
// Capacity: 256 MaxCapacity: 2,147,483,647 Length: 205
// Capacity: 256 MaxCapacity: 2,147,483,647 Length: 236
// Capacity: 512 MaxCapacity: 2,147,483,647 Length: 267
// Capacity: 512 MaxCapacity: 2,147,483,647 Length: 298
// Capacity: 512 MaxCapacity: 2,147,483,647 Length: 329
// Capacity: 512 MaxCapacity: 2,147,483,647 Length: 360
Imports System.Reflection
Imports System.Text
Module Example5
Public Sub Main()
Dim sb As New StringBuilder()
ShowSBInfo(sb)
sb.Append("This is a sentence.")
ShowSBInfo(sb)
For ctr As Integer = 0 To 10
sb.Append("This is an additional sentence.")
ShowSBInfo(sb)
Next
End Sub
Public Sub ShowSBInfo(sb As StringBuilder)
For Each prop In sb.GetType().GetProperties
If prop.GetIndexParameters().Length = 0 Then
Console.Write("{0}: {1:N0} ", prop.Name, prop.GetValue(sb))
End If
Next
Console.WriteLine()
End Sub
End Module
' The example displays the following output:
' Capacity: 16 MaxCapacity: 2,147,483,647 Length: 0
' Capacity: 32 MaxCapacity: 2,147,483,647 Length: 19
' Capacity: 64 MaxCapacity: 2,147,483,647 Length: 50
' Capacity: 128 MaxCapacity: 2,147,483,647 Length: 81
' Capacity: 128 MaxCapacity: 2,147,483,647 Length: 112
' Capacity: 256 MaxCapacity: 2,147,483,647 Length: 143
' Capacity: 256 MaxCapacity: 2,147,483,647 Length: 174
' Capacity: 256 MaxCapacity: 2,147,483,647 Length: 205
' Capacity: 256 MaxCapacity: 2,147,483,647 Length: 236
' Capacity: 512 MaxCapacity: 2,147,483,647 Length: 267
' Capacity: 512 MaxCapacity: 2,147,483,647 Length: 298
' Capacity: 512 MaxCapacity: 2,147,483,647 Length: 329
' Capacity: 512 MaxCapacity: 2,147,483,647 Length: 360
Bellek ayırma
Bir nesnenin StringBuilder varsayılan kapasitesi 16 karakterdir ve varsayılan kapasite üst sınırıdır Int32.MaxValue. Bu varsayılan değerler, StringBuilder() ve StringBuilder(String) oluşturucularını çağırırsanız kullanılır.
Bir nesnenin ilk kapasitesini StringBuilder aşağıdaki yollarla açıkça tanımlayabilirsiniz:
- Nesnesini oluştururken StringBuilder parametresini içeren
capacityoluşturuculardan herhangi birini çağırarak. - Var olan bir StringBuilder.Capacity nesnesini genişletmek için StringBuilder özelliğine açıkça yeni bir değer atayın. (Yeni kapasite mevcut kapasiteden küçükse veya nesnenin maksimum kapasitesinden StringBuilder büyükse özelliği bir özel durum oluşturur.)
- StringBuilder.EnsureCapacity yöntemini yeni kapasiteyle çağırarak. Yeni kapasite nesnenin maksimum kapasitesinden StringBuilder büyük olmamalıdır. Ancak, özelliğine yapılan atamadan Capacity farklı olarak, EnsureCapacity istenen yeni kapasite mevcut kapasiteden küçükse bir özel durum oluşturmaz. Bu durumda yöntem çağrısının hiçbir etkisi yoktur.
Oluşturucu çağrısında nesneye StringBuilder atanan dizenin uzunluğu varsayılan kapasiteyi veya belirtilen kapasiteyi aşarsa, Capacity özellik parametresiyle belirtilen dizenin uzunluğuna value ayarlanır.
Oluşturucuyu çağırarak StringBuilder bir StringBuilder(Int32, Int32) nesnenin maksimum kapasitesini açıkça tanımlayabilirsiniz. Özelliğe salt okunur olduğundan yeni bir değer atayarak maksimum kapasiteyi MaxCapacity değiştiremezsiniz.
Önceki bölümde gösterildiği gibi, mevcut kapasite yetersiz olduğunda ek bellek ayrılır ve bir StringBuilder nesnenin kapasitesi özelliği tarafından MaxCapacity tanımlanan değere kadar iki katına çıkar.
Genel olarak, varsayılan kapasite ve maksimum kapasite çoğu uygulama için yeterlidir. Aşağıdaki koşullar altında bu değerleri ayarlamayı düşünebilirsiniz:
- Nesnenin StringBuilder nihai boyutu genellikle birkaç megabayttan fazla olmak üzere çok fazla büyüyecekse. Bu durumda, çok fazla bellek yeniden ayırma gereksinimini ortadan kaldırmak için ilk Capacity özelliği önemli ölçüde yüksek bir değere ayarlamanın bazı performans yararları olabilir.
- Kodunuz sınırlı belleğe sahip bir sistemde çalışıyorsa. Bu durumda, kodunuz büyük dizeleri işliyorsa ve bu bellek kısıtlı bir ortamda çalışmasına neden oluyorsa, MaxCapacity’den daha düşük bir değere ayarlamayı düşünebilirsiniz.
StringBuilder nesnesinin örneğini oluşturma
Aşağıdaki tabloda listelenen altı aşırı yüklenmiş sınıf oluşturucusunun birini çağırarak bir StringBuilder nesne örneği oluşturursunuz. Üç oluşturucu, değeri boş bir dize olan bir StringBuilder nesnesinin örneğini oluşturur, ancak Capacity ve MaxCapacity değerlerini farklı ayarlar. Kalan üç oluşturucu, belirli bir StringBuilder dize değerine ve kapasitesine sahip bir nesne tanımlar. Üç oluşturucudan ikisi varsayılan en yüksek kapasiteyi Int32.MaxValuekullanırken, üçüncüsü maksimum kapasiteyi ayarlamanıza olanak tanır.
| Yapıcı | Dize değeri | Kapasite | Maksimum kapasite |
|---|---|---|---|
| StringBuilder() | String.Empty | 16 | Int32.MaxValue |
| StringBuilder(Int32) | String.Empty |
capacity parametresi tarafından tanımlanır |
Int32.MaxValue |
| StringBuilder(Int32, Int32) | String.Empty |
capacity parametresi tarafından tanımlanır |
maxCapacity parametresi tarafından tanımlanır |
| StringBuilder(String) |
value parametresi tarafından tanımlanır |
16 veya value.
Length, hangisi daha büyükse |
Int32.MaxValue |
| StringBuilder(String, Int32) |
value parametresi tarafından tanımlanır |
capacity parametresi veya value tarafından tanımlanır.
Length, hangisi daha büyükse. |
Int32.MaxValue |
| StringBuilder(String, Int32, Int32, Int32) |
value tarafından tanımlanır.
Substring(startIndex, length) |
capacity parametresi veya value tarafından tanımlanır.
Length, hangisi daha büyükse. |
Int32.MaxValue |
Aşağıdaki örnek, StringBuilder nesnelerini oluşturmak için bu oluşturucu aşırı yüklemelerinden üç tanesini kullanır.
using System;
using System.Text;
public class Example8
{
public static void Main()
{
string value = "An ordinary string";
int index = value.IndexOf("An ") + 3;
int capacity = 0xFFFF;
// Instantiate a StringBuilder from a string.
StringBuilder sb1 = new StringBuilder(value);
ShowSBInfo(sb1);
// Instantiate a StringBuilder from string and define a capacity.
StringBuilder sb2 = new StringBuilder(value, capacity);
ShowSBInfo(sb2);
// Instantiate a StringBuilder from substring and define a capacity.
StringBuilder sb3 = new StringBuilder(value, index,
value.Length - index,
capacity);
ShowSBInfo(sb3);
}
public static void ShowSBInfo(StringBuilder sb)
{
Console.WriteLine($"\nValue: {sb.ToString()}");
foreach (var prop in sb.GetType().GetProperties())
{
if (prop.GetIndexParameters().Length == 0)
Console.Write("{0}: {1:N0} ", prop.Name, prop.GetValue(sb));
}
Console.WriteLine();
}
}
// The example displays the following output:
// Value: An ordinary string
// Capacity: 18 MaxCapacity: 2,147,483,647 Length: 18
//
// Value: An ordinary string
// Capacity: 65,535 MaxCapacity: 2,147,483,647 Length: 18
//
// Value: ordinary string
// Capacity: 65,535 MaxCapacity: 2,147,483,647 Length: 15
open System.Text
let showSBInfo (sb: StringBuilder) =
for prop in sb.GetType().GetProperties() do
if prop.GetIndexParameters().Length = 0 then
printf $"{prop.Name}: {prop.GetValue sb:N0} "
printfn ""
let value = "An ordinary string"
let index = value.IndexOf "An " + 3
let capacity = 0xFFFF
// Instantiate a StringBuilder from a string.
let sb1 = StringBuilder value
showSBInfo sb1
// Instantiate a StringBuilder from string and define a capacity.
let sb2 = StringBuilder(value, capacity)
showSBInfo sb2
// Instantiate a StringBuilder from substring and define a capacity.
let sb3 = StringBuilder(value, index, value.Length - index, capacity)
showSBInfo sb3
// The example displays the following output:
// Value: An ordinary string
// Capacity: 18 MaxCapacity: 2,147,483,647 Length: 18
//
// Value: An ordinary string
// Capacity: 65,535 MaxCapacity: 2,147,483,647 Length: 18
//
// Value: ordinary string
// Capacity: 65,535 MaxCapacity: 2,147,483,647 Length: 15
Imports System.Text
Module Example8
Public Sub Main()
Dim value As String = "An ordinary string"
Dim index As Integer = value.IndexOf("An ") + 3
Dim capacity As Integer = &HFFFF
' Instantiate a StringBuilder from a string.
Dim sb1 As New StringBuilder(value)
ShowSBInfo(sb1)
' Instantiate a StringBuilder from string and define a capacity.
Dim sb2 As New StringBuilder(value, capacity)
ShowSBInfo(sb2)
' Instantiate a StringBuilder from substring and define a capacity.
Dim sb3 As New StringBuilder(value, index,
value.Length - index,
capacity)
ShowSBInfo(sb3)
End Sub
Public Sub ShowSBInfo(sb As StringBuilder)
Console.WriteLine()
Console.WriteLine("Value: {0}", sb.ToString())
For Each prop In sb.GetType().GetProperties
If prop.GetIndexParameters().Length = 0 Then
Console.Write("{0}: {1:N0} ", prop.Name, prop.GetValue(sb))
End If
Next
Console.WriteLine()
End Sub
End Module
' The example displays the following output:
' Value: An ordinary string
' Capacity: 18 MaxCapacity: 2,147,483,647 Length: 18
'
' Value: An ordinary string
' Capacity: 65,535 MaxCapacity: 2,147,483,647 Length: 18
'
' Value: ordinary string
' Capacity: 65,535 MaxCapacity: 2,147,483,647 Length: 15
StringBuilder yöntemlerini çağırma
Bir StringBuilder örnekteki dizeyi değiştiren yöntemlerin çoğu aynı örneğe başvuru döndürür. Bu, StringBuilder yöntemlerini iki şekilde çağırmanızı sağlar.
Aşağıdaki örnekte olduğu gibi, ayrı ayrı yöntem çağrıları yapabilir ve dönüş değerini görmezden gelebilirsiniz.
using System; using System.Text; public class Example { public static void Main() { StringBuilder sb = new StringBuilder(); sb.Append("This is the beginning of a sentence, "); sb.Replace("the beginning of ", ""); sb.Insert(sb.ToString().IndexOf("a ") + 2, "complete "); sb.Replace(",", "."); Console.WriteLine(sb.ToString()); } } // The example displays the following output: // This is a complete sentence.open System.Text let sb = StringBuilder() sb.Append "This is the beginning of a sentence, " |> ignore sb.Replace("the beginning of ", "") |> ignore sb.Insert((string sb).IndexOf "a " + 2, "complete ") |> ignore sb.Replace(",", ".") |> ignore printfn $"{sb}" // The example displays the following output: // This is a complete sentence.Imports System.Text Module Example2 Public Sub Main() Dim sb As New StringBuilder() sb.Append("This is the beginning of a sentence, ") sb.Replace("the beginning of ", "") sb.Insert(sb.ToString().IndexOf("a ") + 2, "complete ") sb.Replace(",", ".") Console.WriteLine(sb.ToString()) End Sub End Module ' The example displays the following output: ' This is a complete sentence.Tek bir deyimde bir dizi yöntem çağrısı yapabilirsiniz. Ardışık işlemleri zincirleyen tek bir deyim yazmak istiyorsanız bu kullanışlı olabilir. Aşağıdaki örnek, önceki örnekteki üç yöntem çağrısını tek bir kod satırında birleştirir.
using System; using System.Text; public class Example2 { public static void Main() { StringBuilder sb = new StringBuilder("This is the beginning of a sentence, "); sb.Replace("the beginning of ", "").Insert(sb.ToString().IndexOf("a ") + 2, "complete ").Replace(",", "."); Console.WriteLine(sb.ToString()); } } // The example displays the following output: // This is a complete sentence.open System.Text let sb = StringBuilder "This is the beginning of a sentence, " sb .Replace("the beginning of ", "") .Insert((string sb).IndexOf "a " + 2, "complete ") .Replace(",", ".") |> ignore printfn $"{sb}" // The example displays the following output: // This is a complete sentence.Imports System.Text Module Example3 Public Sub Main() Dim sb As New StringBuilder("This is the beginning of a sentence, ") sb.Replace("the beginning of ", "").Insert(sb.ToString().IndexOf("a ") + 2, "complete ").Replace(", ", ".") Console.WriteLine(sb.ToString()) End Sub End Module ' The example displays the following output: ' This is a complete sentence.
StringBuilder işlemleri gerçekleştirme
Bir nesnedeki StringBuilder karakterleri StringBuilder yinelemek, eklemek, silmek veya değiştirmek için sınıfının yöntemlerini kullanabilirsiniz.
StringBuilder karakterlerini yineleme
StringBuilder özelliğini kullanarak bir StringBuilder.Chars[] nesnesindeki karakterlere erişebilirsiniz. C# Chars[] dilinde bir dizin oluşturucudur; Visual Basic'te sınıfın StringBuilder varsayılan özelliğidir. Bu, Chars[Int32] özelliğine açıkça başvurmadan yalnızca dizinlerini kullanarak tek tek karakterleri ayarlamanıza veya almanıza olanak tanır. Nesnedeki StringBuilder karakterler 0 (sıfır) dizininde başlar ve Length dizinine kadar, - 1'e kadar devam eder.
Aşağıdaki örnekte Chars[Int32] özelliği gösterilmektedir. StringBuilder nesnesine on rastgele sayı ekler ve ardından her karakter üzerinde döngü yapar. Karakterin Unicode kategorisi ise UnicodeCategory.DecimalDigitNumber, sayıyı 1 azaltır (veya değeri 0 ise sayıyı 9 olarak değiştirir). Örnekte, tek tek karakterlerin StringBuilder değerleri değiştirilmeden önce ve sonra nesnenin içeriği görüntülenir.
using System;
using System.Globalization;
using System.Text;
public class Example3
{
public static void Main()
{
Random rnd = new Random();
StringBuilder sb = new StringBuilder();
// Generate 10 random numbers and store them in a StringBuilder.
for (int ctr = 0; ctr <= 9; ctr++)
sb.Append(rnd.Next().ToString("N5"));
Console.WriteLine("The original string:");
Console.WriteLine(sb.ToString());
// Decrease each number by one.
for (int ctr = 0; ctr < sb.Length; ctr++)
{
if (Char.GetUnicodeCategory(sb[ctr]) == UnicodeCategory.DecimalDigitNumber)
{
int number = (int)Char.GetNumericValue(sb[ctr]);
number--;
if (number < 0) number = 9;
sb[ctr] = number.ToString()[0];
}
}
Console.WriteLine("\nThe new string:");
Console.WriteLine(sb.ToString());
}
}
// The example displays the following output:
// The original string:
// 1,457,531,530.00000940,522,609.000001,668,113,564.000001,998,992,883.000001,792,660,834.00
// 000101,203,251.000002,051,183,075.000002,066,000,067.000001,643,701,043.000001,702,382,508
// .00000
//
// The new string:
// 0,346,420,429.99999839,411,598.999990,557,002,453.999990,887,881,772.999990,681,559,723.99
// 999090,192,140.999991,940,072,964.999991,955,999,956.999990,532,690,932.999990,691,271,497
// .99999
open System
open System.Globalization
open System.Text
let rnd = Random()
let sb = new StringBuilder()
// Generate 10 random numbers and store them in a StringBuilder.
for _ = 0 to 9 do
rnd.Next().ToString "N5" |> sb.Append |> ignore
printfn "The original string:"
printfn $"{sb}"
// Decrease each number by one.
for i = 0 to sb.Length - 1 do
if Char.GetUnicodeCategory(sb[i]) = UnicodeCategory.DecimalDigitNumber then
let number = Char.GetNumericValue sb.[i] |> int
let number = number - 1
let number = if number < 0 then 9 else number
sb.[i] <- number.ToString()[0]
printfn "\nThe new string:"
printfn $"{sb}"
// The example displays the following output:
// The original string:
// 1,457,531,530.00000940,522,609.000001,668,113,564.000001,998,992,883.000001,792,660,834.00
// 000101,203,251.000002,051,183,075.000002,066,000,067.000001,643,701,043.000001,702,382,508
// .00000
//
// The new string:
// 0,346,420,429.99999839,411,598.999990,557,002,453.999990,887,881,772.999990,681,559,723.99
// 999090,192,140.999991,940,072,964.999991,955,999,956.999990,532,690,932.999990,691,271,497
// .99999
Imports System.Globalization
Imports System.Text
Module Example4
Public Sub Main()
Dim rnd As New Random()
Dim sb As New StringBuilder()
' Generate 10 random numbers and store them in a StringBuilder.
For ctr As Integer = 0 To 9
sb.Append(rnd.Next().ToString("N5"))
Next
Console.WriteLine("The original string:")
Console.WriteLine(sb.ToString())
Console.WriteLine()
' Decrease each number by one.
For ctr As Integer = 0 To sb.Length - 1
If Char.GetUnicodeCategory(sb(ctr)) = UnicodeCategory.DecimalDigitNumber Then
Dim number As Integer = CType(Char.GetNumericValue(sb(ctr)), Integer)
number -= 1
If number < 0 Then number = 9
sb(ctr) = number.ToString()(0)
End If
Next
Console.WriteLine("The new string:")
Console.WriteLine(sb.ToString())
End Sub
End Module
' The example displays the following output:
' The original string:
' 1,457,531,530.00000940,522,609.000001,668,113,564.000001,998,992,883.000001,792,660,834.00
' 000101,203,251.000002,051,183,075.000002,066,000,067.000001,643,701,043.000001,702,382,508
' .00000
'
' The new string:
' 0,346,420,429.99999839,411,598.999990,557,002,453.999990,887,881,772.999990,681,559,723.99
' 999090,192,140.999991,940,072,964.999991,955,999,956.999990,532,690,932.999990,691,271,497
' .99999
özelliğiyle karakter tabanlı dizin oluşturmanın Chars[] kullanılması aşağıdaki koşullar altında son derece yavaş olabilir:
- Örnek StringBuilder büyük (örneğin, birkaç on binlerce karakterden oluşur).
- "StringBuilder 'parçalı'dır. Başka bir ifadeyle, StringBuilder.Append yöntemlerine yapılan yinelenen çağrılar nesnenin StringBuilder.Capacity özelliğini otomatik olarak genişletmiş ve ona yeni bellek parçaları ayırmıştır."
Her karakter erişimi, doğru arabelleğe erişmek için bağlantılı öbek listesinin tamamını taradığından performans ciddi ölçüde etkilenir.
Note
Büyük bir "öbekli" StringBuilder nesne için bile, bir veya birkaç karaktere dizin tabanlı erişim için Chars[] özelliğinin kullanılması ihmal edilebilir bir performans etkisine sahiptir; genellikle bu, bir O(n) işlemidir. Önemli performans etkisi, nesnedeki StringBuilder karakterleri yinelerken (O (n^2) işlemidir.
Nesnelerle karakter tabanlı dizin oluşturma kullanırken performans sorunlarıyla StringBuilder karşılaşırsanız, aşağıdaki geçici çözümlerden herhangi birini kullanabilirsiniz:
StringBuilder yöntemini çağırarak örneği bir'e String dönüştürünToString, ardından dizedeki karakterlere erişin.
Varolan StringBuilder nesnenin içeriğini önceden boyutlandırılmış StringBuilder yeni bir nesneye kopyalayın. Yeni StringBuilder nesne öbekli olmadığından performans artar. Örneğin:
// sbOriginal is the existing StringBuilder object var sbNew = new StringBuilder(sbOriginal.ToString(), sbOriginal.Length);' sbOriginal is the existing StringBuilder object Dim sbNew = New StringBuilder(sbOriginal.ToString(), sbOriginal.Length)Oluşturucuyu çağırarak nesnenin StringBuilder ilk kapasitesini yaklaşık olarak beklenen en büyük boyutuna eşit bir değere StringBuilder(Int32) ayarlayın. Bunun, en yüksek kapasiteye nadiren ulaşsa StringBuilder bile bellek bloğunun tamamını ayırdığını unutmayın.
StringBuilder nesnesine metin ekleme
sınıfı, StringBuilder bir StringBuilder nesnenin içeriğini genişletmek için aşağıdaki yöntemleri içerir:
Append yöntemi bir dizeyi, alt dizeyi, karakter dizisini, karakter dizisinin bir bölümünü, birden çok kez tekrarlanan tek bir karakteri veya ilkel veri türünün dize gösterimini bir StringBuilder nesneye ekler.
AppendLine yöntemi, bir satır sonlandırıcı veya bir dize ile birlikte bir satır sonlandırıcıyı bir StringBuilder nesnesine ekler.
AppendFormat yöntemi, bir bileşik biçim dizesini bir StringBuilder nesneye ekler. Sonuç dizesine dahil edilen nesnelerin dize gösterimleri, geçerli sistem kültürünün veya belirtilen kültürün biçimlendirme kurallarını yansıtabilir.
Insert yöntemi bir dizeyi, alt dizeyi, bir dizenin birden çok yinelemesini, karakter dizisini, karakter dizisinin bir bölümünü veya ilkel veri türünün dize gösterimini nesnede StringBuilder belirtilen bir konuma ekler. Konum sıfır tabanlı bir dizin tarafından tanımlanır.
Aşağıdaki örnek, bir nesnenin Appendmetnini genişletmek için , AppendLine, AppendFormatve Insert yöntemlerini kullanır.StringBuilder
using System;
using System.Text;
public class Example6
{
public static void Main()
{
// Create a StringBuilder object with no text.
StringBuilder sb = new StringBuilder();
// Append some text.
sb.Append('*', 10).Append(" Adding Text to a StringBuilder Object ").Append('*', 10);
sb.AppendLine("\n");
sb.AppendLine("Some code points and their corresponding characters:");
// Append some formatted text.
for (int ctr = 50; ctr <= 60; ctr++)
{
sb.AppendFormat("{0,12:X4} {1,12}", ctr, Convert.ToChar(ctr));
sb.AppendLine();
}
// Find the end of the introduction to the column.
int pos = sb.ToString().IndexOf("characters:") + 11 +
Environment.NewLine.Length;
// Insert a column header.
sb.Insert(pos, $"{Environment.NewLine}{"Code Unit",12} {"Character",12}{Environment.NewLine}");
// Convert the StringBuilder to a string and display it.
Console.WriteLine(sb.ToString());
}
}
// The example displays the following output:
// ********** Adding Text to a StringBuilder Object **********
//
// Some code points and their corresponding characters:
//
// Code Unit Character
// 0032 2
// 0033 3
// 0034 4
// 0035 5
// 0036 6
// 0037 7
// 0038 8
// 0039 9
// 003A :
// 003B ;
// 003C <
open System
open System.Text
// Create a StringBuilder object with no text.
let sb = StringBuilder()
// Append some text.
sb
.Append('*', 10)
.Append(" Adding Text to a StringBuilder Object ")
.Append('*', 10)
|> ignore
sb.AppendLine "\n" |> ignore
sb.AppendLine "Some code points and their corresponding characters:" |> ignore
// Append some formatted text.
for i = 50 to 60 do
sb.AppendFormat("{0,12:X4} {1,12}", i, Convert.ToChar i) |> ignore
sb.AppendLine() |> ignore
// Find the end of the introduction to the column.
let pos = (string sb).IndexOf("characters:") + 11 + Environment.NewLine.Length
// Insert a column header.
sb.Insert(pos, String.Format("{2}{0,12:X4} {1,12}{2}", "Code Unit", "Character", "\n"))
|> ignore
// Convert the StringBuilder to a string and display it.
printfn $"{sb}"
// The example displays the following output:
// ********** Adding Text to a StringBuilder Object **********
//
// Some code points and their corresponding characters:
//
// Code Unit Character
// 0032 2
// 0033 3
// 0034 4
// 0035 5
// 0036 6
// 0037 7
// 0038 8
// 0039 9
// 003A :
// 003B ;
// 003C <
Imports System.Text
Module Example7
Public Sub Main()
' Create a StringBuilder object with no text.
Dim sb As New StringBuilder()
' Append some text.
sb.Append("*"c, 10).Append(" Adding Text to a StringBuilder Object ").Append("*"c, 10)
sb.AppendLine()
sb.AppendLine()
sb.AppendLine("Some code points and their corresponding characters:")
' Append some formatted text.
For ctr = 50 To 60
sb.AppendFormat("{0,12:X4} {1,12}", ctr, Convert.ToChar(ctr))
sb.AppendLine()
Next
' Find the end of the introduction to the column.
Dim pos As Integer = sb.ToString().IndexOf("characters:") + 11 +
Environment.NewLine.Length
' Insert a column header.
sb.Insert(pos, String.Format("{2}{0,12} {1,12}{2}", "Code Unit",
"Character", vbCrLf))
' Convert the StringBuilder to a string and display it.
Console.WriteLine(sb.ToString())
End Sub
End Module
' The example displays the following output:
' ********** Adding Text to a StringBuilder Object **********
'
' Some code points and their corresponding characters:
'
' Code Unit Character
' 0032 2
' 0033 3
' 0034 4
' 0035 5
' 0036 6
' 0037 7
' 0038 8
' 0039 9
' 003A :
' 003B ;
' 003C <
StringBuilder nesnesinden metin silme
Bu sınıf, mevcut StringBuilder örneğin boyutunu azaltabilecek metotlar içerir. Clear yöntemi tüm karakterleri kaldırır ve özelliğini sıfır olarak ayarlarLength. yöntemi, Remove belirli bir dizin konumundan başlayarak belirtilen sayıda karakteri siler. Ayrıca, özelliğini geçerli örneğin uzunluğundan StringBuilder daha küçük bir değere ayarlayarak Length nesnenin sonundaki karakterleri kaldırabilirsiniz.
Aşağıdaki örnek bir nesneden metnin bir StringBuilder bölümünü kaldırır, sonuçta elde edilen kapasite, maksimum kapasite ve uzunluk özellik değerlerini görüntüler ve ardından nesnedeki Clear tüm karakterleri kaldırmak için yöntemini çağırırStringBuilder.
using System;
using System.Text;
public class Example5
{
public static void Main()
{
StringBuilder sb = new StringBuilder("A StringBuilder object");
ShowSBInfo(sb);
// Remove "object" from the text.
string textToRemove = "object";
int pos = sb.ToString().IndexOf(textToRemove);
if (pos >= 0)
{
sb.Remove(pos, textToRemove.Length);
ShowSBInfo(sb);
}
// Clear the StringBuilder contents.
sb.Clear();
ShowSBInfo(sb);
}
public static void ShowSBInfo(StringBuilder sb)
{
Console.WriteLine($"\nValue: {sb.ToString()}");
foreach (var prop in sb.GetType().GetProperties())
{
if (prop.GetIndexParameters().Length == 0)
Console.Write("{0}: {1:N0} ", prop.Name, prop.GetValue(sb));
}
Console.WriteLine();
}
}
// The example displays the following output:
// Value: A StringBuilder object
// Capacity: 22 MaxCapacity: 2,147,483,647 Length: 22
//
// Value: A StringBuilder
// Capacity: 22 MaxCapacity: 2,147,483,647 Length: 16
//
// Value:
// Capacity: 22 MaxCapacity: 2,147,483,647 Length: 0
open System.Text
let showSBInfo (sb: StringBuilder) =
for prop in sb.GetType().GetProperties() do
if prop.GetIndexParameters().Length = 0 then
printf $"{prop.Name}: {prop.GetValue sb:N0} "
printfn ""
let sb = StringBuilder "A StringBuilder object"
showSBInfo sb
// Remove "object" from the text.
let textToRemove = "object"
let pos = (string sb).IndexOf textToRemove
if pos >= 0 then
sb.Remove(pos, textToRemove.Length) |> ignore
showSBInfo sb
// Clear the StringBuilder contents.
sb.Clear() |> ignore
showSBInfo sb
// The example displays the following output:
// Value: A StringBuilder object
// Capacity: 22 MaxCapacity: 2,147,483,647 Length: 22
//
// Value: A StringBuilder
// Capacity: 22 MaxCapacity: 2,147,483,647 Length: 16
//
// Value:
// Capacity: 22 MaxCapacity: 2,147,483,647 Length: 0
Imports System.Text
Module Example6
Public Sub Main()
Dim sb As New StringBuilder("A StringBuilder object")
ShowSBInfo(sb)
' Remove "object" from the text.
Dim textToRemove As String = "object"
Dim pos As Integer = sb.ToString().IndexOf(textToRemove)
If pos >= 0 Then
sb.Remove(pos, textToRemove.Length)
ShowSBInfo(sb)
End If
' Clear the StringBuilder contents.
sb.Clear()
ShowSBInfo(sb)
End Sub
Public Sub ShowSBInfo(sb As StringBuilder)
Console.WriteLine()
Console.WriteLine("Value: {0}", sb.ToString())
For Each prop In sb.GetType().GetProperties
If prop.GetIndexParameters().Length = 0 Then
Console.Write("{0}: {1:N0} ", prop.Name, prop.GetValue(sb))
End If
Next
Console.WriteLine()
End Sub
End Module
' The example displays the following output:
' Value: A StringBuilder object
' Capacity: 22 MaxCapacity: 2,147,483,647 Length: 22
'
' Value: A StringBuilder
' Capacity: 22 MaxCapacity: 2,147,483,647 Length: 16
'
' Value:
' Capacity: 22 MaxCapacity: 2,147,483,647 Length: 0
StringBuilder nesnesindeki metni değiştirme
yöntemi, StringBuilder.Replace bir karakterin veya dizenin nesnenin tamamında veya belirli bir karakter aralığındaki tüm StringBuilder oluşumlarının yerini alır. Aşağıdaki örnek, Replace nesnesindeki tüm ünlem işaretlerini (!) soru işaretleri (?) ile değiştirmek için StringBuilder yöntemini kullanır.
using System;
using System.Text;
public class Example13
{
public static void Main()
{
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Replace('!', '?');
Console.WriteLine(MyStringBuilder);
}
}
// The example displays the following output:
// Hello World?
open System.Text
let myStringBuilder = StringBuilder "Hello World!"
myStringBuilder.Replace('!', '?') |> ignore
printfn $"{myStringBuilder}"
// The example displays the following output:
// Hello World?
Imports System.Text
Module Example
Public Sub Main()
Dim MyStringBuilder As New StringBuilder("Hello World!")
MyStringBuilder.Replace("!"c, "?"c)
Console.WriteLine(MyStringBuilder)
End Sub
End Module
' The example displays the following output:
' Hello World?
StringBuilder nesnesindeki metni arama
StringBuilder sınıfı, belirli bir karakter veya alt dize aramanıza olanak tanıyan String.Contains sınıfı tarafından sağlanan String.IndexOf, String.StartsWith ve String yöntemlerine benzer yöntemler içermez. Bir alt dizenin varlığını veya başlangıç karakteri konumunu belirlemek için bir String değeri üzerinde dizi arama yöntemi veya normal ifade yöntemi kullanarak arama yapmanız gerekir. Aşağıdaki tabloda gösterildiği gibi, bu tür aramaları uygulamanın dört yolu vardır.
| Technique | Pros | Cons |
|---|---|---|
| Dize değerlerini nesneye StringBuilder eklemeden önce arayın. | Bir alt dizenin mevcut olup olmadığını belirlemek için kullanışlıdır. | Bir alt dizenin dizin konumu önemli olduğunda kullanılamaz. |
| ToString nesnesini çağırın ve döndürülen String nesnesini arayın. | Tüm metni bir StringBuilder nesneye atar ve sonra değiştirmeye başlarsanız kullanımı kolaydır. | Tüm metinler ToString nesnesine eklenmeden önce değişiklik yapmanız gerekiyorsa, StringBuilder çağrılarını tekrar tekrar yapmak zahmetli olabilir. Değişiklik yapıyorsanız nesne metninin StringBuilder sonundan çalışmayı unutmayın. |
| Chars[Int32] Bir karakter aralığını sıralı olarak aramak için özelliğini kullanın. | Tek tek karakterlerle veya küçük bir alt dizeyle ilgileniyorsanız kullanışlıdır. | Aranacak karakter sayısı büyükse veya arama mantığı karmaşıksa hantal. Yinelenen yöntem çağrılarıyla çok büyük hale gelmiş nesneler için çok düşük bir performansa neden olur. |
| StringBuilder Nesnesini bir String nesneye dönüştürün ve nesne üzerinde String değişiklikler yapın. | Değişiklik sayısı azsa kullanışlıdır. | Değişiklik sayısı büyükse sınıfın StringBuilder performans avantajını olumsuzlar. |
Şimdi bu teknikleri daha ayrıntılı inceleyelim.
Aramanın amacı belirli bir alt dizenin var olup olmadığını belirlemekse (yani alt dizenin konumuyla ilgilenmiyorsanız), dizeleri nesnede StringBuilder depolamadan önce arayabilirsiniz. Aşağıdaki örnek olası bir uygulama sağlar.
StringBuilderFindersınıfının oluşturucusuna bir StringBuilder nesnesine ve dizide bulunacak alt dizeye bir başvuru geçirilir. Bu durumda örnek, kaydedilen sıcaklıkların Fahrenheit mi yoksa Santigrat mı olduğunu belirlemeye çalışır ve nesnenin StringBuilder başına uygun giriş metnini ekler. Rastgele sayı oluşturucu, santigrat derece veya Fahrenheit derecelerinde veri içeren bir diziyi seçmek için kullanılır.using System; using System.Text; public class Example9 { public static void Main() { Random rnd = new Random(); string[] tempF = { "47.6F", "51.3F", "49.5F", "62.3F" }; string[] tempC = { "21.2C", "16.1C", "23.5C", "22.9C" }; string[][] temps = { tempF, tempC }; StringBuilder sb = new StringBuilder(); var f = new StringBuilderFinder(sb, "F"); var baseDate = new DateTime(2013, 5, 1); String[] temperatures = temps[rnd.Next(2)]; bool isFahrenheit = false; foreach (var temperature in temperatures) { if (isFahrenheit) sb.AppendFormat("{0:d}: {1}\n", baseDate, temperature); else isFahrenheit = f.SearchAndAppend(String.Format("{0:d}: {1}\n", baseDate, temperature)); baseDate = baseDate.AddDays(1); } if (isFahrenheit) { sb.Insert(0, "Average Daily Temperature in Degrees Fahrenheit"); sb.Insert(47, "\n\n"); } else { sb.Insert(0, "Average Daily Temperature in Degrees Celsius"); sb.Insert(44, "\n\n"); } Console.WriteLine(sb.ToString()); } } public class StringBuilderFinder { private StringBuilder sb; private String text; public StringBuilderFinder(StringBuilder sb, String textToFind) { this.sb = sb; this.text = textToFind; } public bool SearchAndAppend(String stringToSearch) { sb.Append(stringToSearch); return stringToSearch.Contains(text); } } // The example displays output similar to the following: // Average Daily Temperature in Degrees Celsius // // 5/1/2013: 21.2C // 5/2/2013: 16.1C // 5/3/2013: 23.5C // 5/4/2013: 22.9Copen System open System.Text type StringBuilderFinder(sb: StringBuilder, textToFind: string) = member _.SearchAndAppend(stringToSearch: string) = sb.Append stringToSearch |> ignore stringToSearch.Contains textToFind let tempF = [| "47.6F"; "51.3F"; "49.5F"; "62.3F" |] let tempC = [| "21.2C"; "16.1C"; "23.5C"; "22.9C" |] let temps = [| tempF; tempC |] let sb = StringBuilder() let f = StringBuilderFinder(sb, "F") let temperatures = temps[Random.Shared.Next(2)] let mutable baseDate = DateTime(2013, 5, 1) let mutable isFahrenheit = false for temperature in temperatures do if isFahrenheit then sb.AppendFormat("{0:d}: {1}\n", baseDate, temperature) |> ignore else isFahrenheit <- $"{baseDate:d}: {temperature}\n" |> f.SearchAndAppend baseDate <- baseDate.AddDays 1 if isFahrenheit then sb.Insert(0, "Average Daily Temperature in Degrees Fahrenheit") |> ignore sb.Insert(47, "\n\n") |> ignore else sb.Insert(0, "Average Daily Temperature in Degrees Celsius") |> ignore sb.Insert(44, "\n\n") |> ignore printfn $"{sb}" // The example displays output similar to the following: // Average Daily Temperature in Degrees Celsius // // 5/1/2013: 21.2C // 5/2/2013: 16.1C // 5/3/2013: 23.5C // 5/4/2013: 22.9CImports System.Text Module Example9 Public Sub Main() Dim rnd As New Random() Dim tempF() As String = {"47.6F", "51.3F", "49.5F", "62.3F"} Dim tempC() As String = {"21.2C", "16.1C", "23.5C", "22.9C"} Dim temps()() As String = {tempF, tempC} Dim sb As StringBuilder = New StringBuilder() Dim f As New StringBuilderFinder(sb, "F") Dim baseDate As New DateTime(2013, 5, 1) Dim temperatures() As String = temps(rnd.Next(2)) Dim isFahrenheit As Boolean = False For Each temperature In temperatures If isFahrenheit Then sb.AppendFormat("{0:d}: {1}{2}", baseDate, temperature, vbCrLf) Else isFahrenheit = f.SearchAndAppend(String.Format("{0:d}: {1}{2}", baseDate, temperature, vbCrLf)) End If baseDate = baseDate.AddDays(1) Next If isFahrenheit Then sb.Insert(0, "Average Daily Temperature in Degrees Fahrenheit") sb.Insert(47, vbCrLf + vbCrLf) Else sb.Insert(0, "Average Daily Temperature in Degrees Celsius") sb.Insert(44, vbCrLf + vbCrLf) End If Console.WriteLine(sb.ToString()) End Sub End Module Public Class StringBuilderFinder Private sb As StringBuilder Private text As String Public Sub New(sb As StringBuilder, textToFind As String) Me.sb = sb text = textToFind End Sub Public Function SearchAndAppend(stringToSearch As String) As Boolean sb.Append(stringToSearch) Return stringToSearch.Contains(text) End Function End Class ' The example displays output similar to the following: ' Average Daily Temperature in Degrees Celsius ' ' 5/1/2013: 21.2C ' 5/2/2013: 16.1C ' 5/3/2013: 23.5C ' 5/4/2013: 22.9CStringBuilder.ToString nesnesini bir StringBuilder nesneye dönüştürmek String için yöntemini çağırın. veya String.LastIndexOfgibi String.StartsWith yöntemleri kullanarak dizede arama yapabilir veya desenleri aramak için normal ifadeleri ve Regex sınıfı kullanabilirsiniz. Hem hem de StringBuilderString nesneler karakterleri depolamak için UTF-16 kodlaması kullandığından, karakterlerin, alt dizelerin ve normal ifade eşleşmelerinin dizin konumları her iki nesnede de aynıdır. Bu, StringBuilder yöntemlerini kullanarak String nesnesinde metnin bulunduğu konumda değişiklik yapabilmenizi sağlar.
Note
Bu yaklaşımı benimserseniz, nesneyi tekrar tekrar bir dizeye dönüştürmeniz gerekmemesi için nesnenin sonundan StringBuilderStringBuilder başına kadar çalışmanız gerekir.
Aşağıdaki örnek bu yaklaşımı gösterir. İngilizce alfabenin her harfinin dört oluşumunu bir StringBuilder nesnede depolar. Ardından metni bir String nesneye dönüştürür ve her dört karakterlik dizinin başlangıç konumunu belirlemek için normal bir ifade kullanır. Son olarak, ilk dizi dışında her dört karakterlik diziden önce bir alt çizgi ekler ve her dizinin ilk karakterini büyük harfe dönüştürür.
using System; using System.Text; using System.Text.RegularExpressions; public class Example10 { public static void Main() { // Create a StringBuilder object with 4 successive occurrences // of each character in the English alphabet. StringBuilder sb = new StringBuilder(); for (ushort ctr = (ushort)'a'; ctr <= (ushort)'z'; ctr++) sb.Append(Convert.ToChar(ctr), 4); // Create a parallel string object. String sbString = sb.ToString(); // Determine where each new character sequence begins. String pattern = @"(\w)\1+"; MatchCollection matches = Regex.Matches(sbString, pattern); // Uppercase the first occurrence of the sequence, and separate it // from the previous sequence by an underscore character. for (int ctr = matches.Count - 1; ctr >= 0; ctr--) { Match m = matches[ctr]; sb[m.Index] = Char.ToUpper(sb[m.Index]); if (m.Index > 0) sb.Insert(m.Index, "_"); } // Display the resulting string. sbString = sb.ToString(); int line = 0; do { int nChars = line * 80 + 79 <= sbString.Length ? 80 : sbString.Length - line * 80; Console.WriteLine(sbString.Substring(line * 80, nChars)); line++; } while (line * 80 < sbString.Length); } } // The example displays the following output: // Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_ // Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_Zzzzopen System open System.Text open System.Text.RegularExpressions // Create a StringBuilder object with 4 successive occurrences // of each character in the English alphabet. let sb = StringBuilder() for char in 'a' .. 'z' do sb.Append(char, 4) |> ignore // Create a parallel string object. let sbString = string sb // Determine where each new character sequence begins. let pattern = @"(\w)\1+" let matches = Regex.Matches(sbString, pattern) // Uppercase the first occurrence of the sequence, and separate it // from the previous sequence by an underscore character. for i = matches.Count - 1 downto 0 do let m = matches[i] sb[m.Index] <- Char.ToUpper sb[m.Index] if m.Index > 0 then sb.Insert(m.Index, "_") |> ignore // Display the resulting string. let sbString2 = string sb for line = 0 to (sbString2.Length - 1) / 80 do let nChars = if line * 80 + 79 <= sbString2.Length then 80 else sbString2.Length - line * 80 printfn $"{sbString2.Substring(line * 80, nChars)}" // The example displays the following output: // Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_ // Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_ZzzzImports System.Text Imports System.Text.RegularExpressions Module Example10 Public Sub Main() ' Create a StringBuilder object with 4 successive occurrences ' of each character in the English alphabet. Dim sb As New StringBuilder() For ctr As UShort = AscW("a") To AscW("z") sb.Append(ChrW(ctr), 4) Next ' Create a parallel string object. Dim sbString As String = sb.ToString() ' Determine where each new character sequence begins. Dim pattern As String = "(\w)\1+" Dim matches As MatchCollection = Regex.Matches(sbString, pattern) ' Uppercase the first occurrence of the sequence, and separate it ' from the previous sequence by an underscore character. For ctr As Integer = matches.Count - 1 To 0 Step -1 Dim m As Match = matches(ctr) sb.Chars(m.Index) = Char.ToUpper(sb.Chars(m.Index)) If m.Index > 0 Then sb.Insert(m.Index, "_") Next ' Display the resulting string. sbString = sb.ToString() Dim line As Integer = 0 Do Dim nChars As Integer = If(line * 80 + 79 <= sbString.Length, 80, sbString.Length - line * 80) Console.WriteLine(sbString.Substring(line * 80, nChars)) line += 1 Loop While line * 80 < sbString.Length End Sub End Module ' The example displays the following output: ' Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_ ' Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_ZzzzBir nesnedeki StringBuilder.Chars[] karakter StringBuilder aralığını sıralı olarak aramak için özelliğini kullanın. Aranacak karakter sayısı büyükse veya arama mantığı özellikle karmaşıksa bu yaklaşım pratik olmayabilir. Çok büyük, öbeklenmiş StringBuilder nesneler için karakter karakter dizin tabanlı erişimin performans üzerindeki etkileri için özelliğin belgelerine StringBuilder.Chars[] bakın.
Aşağıdaki örnek, önceki örnekle aynı işleve sahiptir ancak uygulama açısından farklılık gösterir. Bir karakter değerinin Chars[Int32] ne zaman değiştiğini algılamak için özelliğini kullanır, bu konuma bir alt çizgi ekler ve yeni dizideki ilk karakteri büyük harfe dönüştürür.
using System; using System.Text; public class Example11 { public static void Main() { // Create a StringBuilder object with 4 successive occurrences // of each character in the English alphabet. StringBuilder sb = new StringBuilder(); for (ushort ctr = (ushort)'a'; ctr <= (ushort)'z'; ctr++) sb.Append(Convert.ToChar(ctr), 4); // Iterate the text to determine when a new character sequence occurs. int position = 0; Char current = '\u0000'; do { if (sb[position] != current) { current = sb[position]; sb[position] = Char.ToUpper(sb[position]); if (position > 0) sb.Insert(position, "_"); position += 2; } else { position++; } } while (position <= sb.Length - 1); // Display the resulting string. String sbString = sb.ToString(); int line = 0; do { int nChars = line * 80 + 79 <= sbString.Length ? 80 : sbString.Length - line * 80; Console.WriteLine(sbString.Substring(line * 80, nChars)); line++; } while (line * 80 < sbString.Length); } } // The example displays the following output: // Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_ // Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_Zzzzopen System open System.Text // Create a StringBuilder object with 4 successive occurrences // of each character in the English alphabet. let sb = StringBuilder() for char in 'a' .. 'z' do sb.Append(char, 4) |> ignore // Iterate the text to determine when a new character sequence occurs. let mutable position = 0 let mutable current = '\u0000' while position <= sb.Length - 1 do if sb[position] <> current then current <- sb[position] sb[position] <- Char.ToUpper sb[position] if position > 0 then sb.Insert(position, "_") |> ignore position <- position + 2 else position <- position + 1 // Display the resulting string. let sbString = string sb for line = 0 to (sbString.Length - 1) / 80 do let nChars = if line * 80 + 79 <= sbString.Length then 80 else sbString.Length - line * 80 printfn $"{sbString.Substring(line * 80, nChars)}" // The example displays the following output: // Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_ // Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_ZzzzImports System.Text Module Example11 Public Sub Main() ' Create a StringBuilder object with 4 successive occurrences ' of each character in the English alphabet. Dim sb As New StringBuilder() For ctr As UShort = AscW("a") To AscW("z") sb.Append(ChrW(ctr), 4) Next ' Iterate the text to determine when a new character sequence occurs. Dim position As Integer = 0 Dim current As Char = ChrW(0) Do If sb(position) <> current Then current = sb(position) sb(position) = Char.ToUpper(sb(position)) If position > 0 Then sb.Insert(position, "_") position += 2 Else position += 1 End If Loop While position <= sb.Length - 1 ' Display the resulting string. Dim sbString As String = sb.ToString() Dim line As Integer = 0 Do Dim nChars As Integer = If(line * 80 + 79 <= sbString.Length, 80, sbString.Length - line * 80) Console.WriteLine(sbString.Substring(line * 80, nChars)) line += 1 Loop While line * 80 < sbString.Length End Sub End Module ' The example displays the following output: ' Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_ ' Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_ZzzzDeğiştirilmemiş tüm metni StringBuilder nesnesinde depolayın, StringBuilder.ToString nesnesini bir StringBuilder nesnesine dönüştürmek için String yöntemini çağırın, ve değişiklikleri String nesnesi üzerinde gerçekleştirin. Yalnızca birkaç değişikliğiniz varsa bu yaklaşımı kullanabilirsiniz; aksi takdirde sabit dizelerle çalışmanın maliyeti, nesne StringBuilder kullanmanın performans avantajlarını olumsuz etkileyebilir.
Aşağıdaki örnek, önceki iki örnekle aynı işleve sahiptir ancak uygulama açısından farklılık gösterir. Bir StringBuilder nesne oluşturur, nesneyi bir String nesneye dönüştürür ve sonra dizede kalan tüm değişiklikleri gerçekleştirmek için normal bir ifade kullanır. yöntemi, Regex.Replace(String, String, MatchEvaluator) her eşleşmede değiştirme gerçekleştirmek için bir lambda ifadesi kullanır.
using System; using System.Text; using System.Text.RegularExpressions; public class Example12 { public static void Main() { // Create a StringBuilder object with 4 successive occurrences // of each character in the English alphabet. StringBuilder sb = new StringBuilder(); for (ushort ctr = (ushort)'a'; ctr <= (ushort)'z'; ctr++) sb.Append(Convert.ToChar(ctr), 4); // Convert it to a string. String sbString = sb.ToString(); // Use a regex to uppercase the first occurrence of the sequence, // and separate it from the previous sequence by an underscore. string pattern = @"(\w)(\1+)"; sbString = Regex.Replace(sbString, pattern, m => (m.Index > 0 ? "_" : "") + m.Groups[1].Value.ToUpper() + m.Groups[2].Value); // Display the resulting string. int line = 0; do { int nChars = line * 80 + 79 <= sbString.Length ? 80 : sbString.Length - line * 80; Console.WriteLine(sbString.Substring(line * 80, nChars)); line++; } while (line * 80 < sbString.Length); } } // The example displays the following output: // Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_ // Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_Zzzzopen System.Text open System.Text.RegularExpressions // Create a StringBuilder object with 4 successive occurrences // of each character in the English alphabet. let sb = StringBuilder() for char in 'a' .. 'z' do sb.Append(char, 4) |> ignore // Convert it to a string. let sbString = string sb // Use a regex to uppercase the first occurrence of the sequence, // and separate it from the previous sequence by an underscore. let pattern = @"(\w)(\1+)" let sbStringReplaced = Regex.Replace( sbString, pattern, fun m -> (if m.Index > 0 then "_" else "") + m.Groups[ 1 ].Value.ToUpper() + m.Groups[2].Value ) // Display the resulting string. for line = 0 to (sbStringReplaced.Length - 1) / 80 do let nChars = if line * 80 + 79 <= sbStringReplaced.Length then 80 else sbStringReplaced.Length - line * 80 printfn $"{sbStringReplaced.Substring(line * 80, nChars)}" // The example displays the following output: // Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_ // Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_ZzzzImports System.Text Imports System.Text.RegularExpressions Module Example12 Public Sub Main() ' Create a StringBuilder object with 4 successive occurrences ' of each character in the English alphabet. Dim sb As New StringBuilder() For ctr As UShort = AscW("a") To AscW("z") sb.Append(ChrW(ctr), 4) Next ' Convert it to a string. Dim sbString As String = sb.ToString() ' Use a regex to uppercase the first occurrence of the sequence, ' and separate it from the previous sequence by an underscore. Dim pattern As String = "(\w)(\1+)" sbString = Regex.Replace(sbString, pattern, Function(m) If(m.Index > 0, "_", "") + m.Groups(1).Value.ToUpper + m.Groups(2).Value) ' Display the resulting string. Dim line As Integer = 0 Do Dim nChars As Integer = If(line * 80 + 79 <= sbString.Length, 80, sbString.Length - line * 80) Console.WriteLine(sbString.Substring(line * 80, nChars)) line += 1 Loop While line * 80 < sbString.Length End Sub End Module ' The example displays the following output: ' Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_ ' Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_Zzzz
StringBuilder nesnesini dizeye dönüştürme
StringBuilder nesnesi tarafından temsil edilen dizeyi, bir String parametresi olan bir metoda iletebilmek veya kullanıcı arabiriminde gösterebilmek için önce StringBuilder nesnesine dönüştürmeniz gerekir. StringBuilder.ToString metodunu çağırarak bu dönüştürmeyi gerçekleştirirsiniz. Önceki örneğe bakın, bu örnekte ToString nesnesini, bir normal ifade yöntemine geçirilebilmesi için bir dizeye dönüştüren StringBuilder yöntemini çağırır.
Arayanlara Notlar
.NET Core'da ve .NET Framework 4.0 ve sonraki sürümlerinde, StringBuilder oluşturucusunu çağırarak StringBuilder(Int32, Int32) nesnesinin örneğini oluştururken, StringBuilder örneğinin hem uzunluğu hem de kapasitesi MaxCapacity özelliğinin değerinin ötesine geçebilir. Bu, özellikle küçük dizeleri eklemek için ve Append(String) yöntemlerini çağırdığınızda AppendFormat(String, Object) oluşabilir.
Oluşturucular
| Name | Description |
|---|---|
| StringBuilder() |
StringBuilder sınıfının yeni bir örneğini başlatır. |
| StringBuilder(Int32, Int32) |
Sınıfın StringBuilder belirtilen kapasiteyle başlayan ve belirtilen üst sınıra kadar büyüyebilen yeni bir örneğini başlatır. |
| StringBuilder(Int32) |
Belirtilen kapasiteyi kullanarak sınıfın StringBuilder yeni bir örneğini başlatır. |
| StringBuilder(String, Int32, Int32, Int32) |
Belirtilen alt dizeden ve kapasiteden sınıfın yeni bir örneğini StringBuilder başlatır. |
| StringBuilder(String, Int32) |
Belirtilen dizeyi ve kapasiteyi kullanarak sınıfın StringBuilder yeni bir örneğini başlatır. |
| StringBuilder(String) |
Belirtilen dizeyi StringBuilder kullanarak sınıfının yeni bir örneğini başlatır. |
Özellikler
| Name | Description |
|---|---|
| Capacity |
Geçerli örnek tarafından ayrılan bellekte bulunabilecek en fazla karakter sayısını alır veya ayarlar. |
| Chars[Int32] |
Bu örnekte belirtilen karakter konumundaki karakteri alır veya ayarlar. |
| Length |
Geçerli StringBuilder nesnenin uzunluğunu alır veya ayarlar. |
| MaxCapacity |
Bu örneğin maksimum kapasitesini alır. |
Yöntemler
| Name | Description |
|---|---|
| Append(Boolean) |
Belirtilen Boole değerinin dize gösterimini bu örneğe ekler. |
| Append(Byte) |
Belirtilen 8 bit işaretsiz tamsayının dize gösterimini bu örneğe ekler. |
| Append(Char, Int32) |
Unicode karakterinin dize gösteriminin belirtilen sayıda kopyasını bu örneğe ekler. |
| Append(Char) |
Belirtilen Char bir nesnenin dize gösterimini bu örneğe ekler. |
| Append(Char[], Int32, Int32) |
Belirtilen Unicode karakterlerinin alt dizisini dize gösterimini bu örneğe ekler. |
| Append(Char[]) |
Belirtilen dizideki Unicode karakterlerinin dize gösterimini bu örneğe ekler. |
| Append(Char*, Int32) |
Belirtilen bir adreste başlayan unicode karakter dizisini bu örneğe ekler. |
| Append(Decimal) |
Belirtilen ondalık sayının dize gösterimini bu örneğe ekler. |
| Append(Double) |
Belirtilen çift duyarlıklı kayan nokta sayısının dize gösterimini bu örneğe ekler. |
| Append(IFormatProvider, StringBuilder+AppendInterpolatedStringHandler) |
Belirtilen biçimi kullanarak belirtilen ilişkilendirilmiş dizeyi bu örneğe ekler. |
| Append(Int16) |
Belirtilen 16 bit imzalı tamsayının dize gösterimini bu örneğe ekler. |
| Append(Int32) |
Belirtilen 32 bit imzalı tamsayının dize gösterimini bu örneğe ekler. |
| Append(Int64) |
Belirtilen 64 bit imzalı tamsayının dize gösterimini bu örneğe ekler. |
| Append(Object) |
Belirtilen bir nesnenin dize gösterimini bu örneğe ekler. |
| Append(ReadOnlyMemory<Char>) |
Belirtilen salt okunur karakter bellek bölgesinin dize gösterimini bu örneğe ekler. |
| Append(ReadOnlySpan<Char>) |
Belirtilen salt okunur karakter aralığının dize gösterimini bu örneğe ekler. |
| Append(Rune) |
Değiştirilebilir karakter dizesini temsil eder. Bu sınıf devralınamaz. |
| Append(SByte) |
Belirtilen 8 bit imzalı tamsayının dize gösterimini bu örneğe ekler. |
| Append(Single) |
Belirtilen tek duyarlıklı kayan nokta sayısının dize gösterimini bu örneğe ekler. |
| Append(String, Int32, Int32) |
Belirtilen alt dizenin bir kopyasını bu örneğe ekler. |
| Append(String) |
Belirtilen dizenin bir kopyasını bu örneğe ekler. |
| Append(StringBuilder, Int32, Int32) |
Belirtilen dize oluşturucusunun içindeki bir alt dizenin kopyasını bu örneğe ekler. |
| Append(StringBuilder) |
Belirtilen dize oluşturucusunun dize gösterimini bu örneğe ekler. |
| Append(StringBuilder+AppendInterpolatedStringHandler) |
Belirtilen ilişkilendirilmiş dizeyi bu örneğe ekler. |
| Append(UInt16) |
Belirtilen 16 bit işaretsiz tamsayının dize gösterimini bu örneğe ekler. |
| Append(UInt32) |
Belirtilen 32 bit işaretsiz tamsayının dize gösterimini bu örneğe ekler. |
| Append(UInt64) |
Belirtilen 64 bit işaretsiz tamsayının dize gösterimini bu örneğe ekler. |
| AppendFormat(IFormatProvider, CompositeFormat, Object[]) |
Sıfır veya daha fazla biçim öğesi içeren bileşik biçim dizesini işleyerek döndürülen dizeyi bu örneğe ekler. Her biçim öğesi, belirtilen biçim sağlayıcısı kullanılarak bağımsız değişkenlerden herhangi birinin dize gösterimiyle değiştirilir. |
| AppendFormat(IFormatProvider, CompositeFormat, ReadOnlySpan<Object>) |
Sıfır veya daha fazla biçim öğesi içeren bileşik biçim dizesini işleyerek döndürülen dizeyi bu örneğe ekler. Her biçim öğesi, belirtilen biçim sağlayıcısı kullanılarak bağımsız değişkenlerden herhangi birinin dize gösterimiyle değiştirilir. |
| AppendFormat(IFormatProvider, String, Object, Object, Object) |
Sıfır veya daha fazla biçim öğesi içeren bileşik biçim dizesini işleyerek döndürülen dizeyi bu örneğe ekler. Her biçim öğesi, belirtilen biçim sağlayıcısı kullanılarak üç bağımsız değişkenden birinin dize gösterimiyle değiştirilir. |
| AppendFormat(IFormatProvider, String, Object, Object) |
Sıfır veya daha fazla biçim öğesi içeren bileşik biçim dizesini işleyerek döndürülen dizeyi bu örneğe ekler. Her biçim öğesi, belirtilen biçim sağlayıcısı kullanılarak iki bağımsız değişkenden birinin dize gösterimiyle değiştirilir. |
| AppendFormat(IFormatProvider, String, Object) |
Sıfır veya daha fazla biçim öğesi içeren bileşik biçim dizesini işleyerek döndürülen dizeyi bu örneğe ekler. Her biçim öğesi, belirtilen biçim sağlayıcısı kullanılarak tek bir bağımsız değişkenin dize gösterimiyle değiştirilir. |
| AppendFormat(IFormatProvider, String, Object[]) |
Sıfır veya daha fazla biçim öğesi içeren bileşik biçim dizesini işleyerek döndürülen dizeyi bu örneğe ekler. Her biçim öğesi, belirtilen biçim sağlayıcısı kullanılarak parametre dizisindeki karşılık gelen bağımsız değişkenin dize gösterimiyle değiştirilir. |
| AppendFormat(IFormatProvider, String, ReadOnlySpan<Object>) |
Sıfır veya daha fazla biçim öğesi içeren bileşik biçim dizesini işleyerek döndürülen dizeyi bu örneğe ekler. Her biçim öğesi, belirtilen biçim sağlayıcısı kullanılarak parametre aralığında karşılık gelen bağımsız değişkenin dize gösterimiyle değiştirilir. |
| AppendFormat(String, Object, Object, Object) |
Sıfır veya daha fazla biçim öğesi içeren bileşik biçim dizesini işleyerek döndürülen dizeyi bu örneğe ekler. Her biçim öğesi, üç bağımsız değişkenden birinin dize gösterimiyle değiştirilir. |
| AppendFormat(String, Object, Object) |
Sıfır veya daha fazla biçim öğesi içeren bileşik biçim dizesini işleyerek döndürülen dizeyi bu örneğe ekler. Her biçim öğesi, iki bağımsız değişkenden birinin dize gösterimiyle değiştirilir. |
| AppendFormat(String, Object) |
Sıfır veya daha fazla biçim öğesi içeren bileşik biçim dizesini işleyerek döndürülen dizeyi bu örneğe ekler. Her biçim öğesi, tek bir bağımsız değişkenin dize gösterimiyle değiştirilir. |
| AppendFormat(String, Object[]) |
Sıfır veya daha fazla biçim öğesi içeren bileşik biçim dizesini işleyerek döndürülen dizeyi bu örneğe ekler. Her biçim öğesi, parametre dizisindeki karşılık gelen bağımsız değişkenin dize gösterimiyle değiştirilir. |
| AppendFormat(String, ReadOnlySpan<Object>) |
Sıfır veya daha fazla biçim öğesi içeren bileşik biçim dizesini işleyerek döndürülen dizeyi bu örneğe ekler. Her biçim öğesi, parametre aralığında karşılık gelen bağımsız değişkenin dize gösterimiyle değiştirilir. |
| AppendFormat<TArg0,TArg1,TArg2>(IFormatProvider, CompositeFormat, TArg0, TArg1, TArg2) |
Sıfır veya daha fazla biçim öğesi içeren bileşik biçim dizesini işleyerek döndürülen dizeyi bu örneğe ekler. Her biçim öğesi, belirtilen biçim sağlayıcısı kullanılarak bağımsız değişkenlerden herhangi birinin dize gösterimiyle değiştirilir. |
| AppendFormat<TArg0,TArg1>(IFormatProvider, CompositeFormat, TArg0, TArg1) |
Sıfır veya daha fazla biçim öğesi içeren bileşik biçim dizesini işleyerek döndürülen dizeyi bu örneğe ekler. Her biçim öğesi, belirtilen biçim sağlayıcısı kullanılarak bağımsız değişkenlerden herhangi birinin dize gösterimiyle değiştirilir. |
| AppendFormat<TArg0>(IFormatProvider, CompositeFormat, TArg0) |
Sıfır veya daha fazla biçim öğesi içeren bileşik biçim dizesini işleyerek döndürülen dizeyi bu örneğe ekler. Her biçim öğesi, belirtilen biçim sağlayıcısı kullanılarak bağımsız değişkenlerden herhangi birinin dize gösterimiyle değiştirilir. |
| AppendJoin(Char, Object[]) |
Sağlanan nesne dizisindeki öğelerin dize gösterimlerini birleştirir, her üye arasında belirtilen karakter ayırıcısını kullanarak sonucu dize oluşturucusunun geçerli örneğine ekler. |
| AppendJoin(Char, ReadOnlySpan<Object>) |
Her üye arasında belirtilen karakter ayırıcısını kullanarak nesnelerin sağlanan yayılma alanındaki öğelerin dize gösterimlerini birleştirir, ardından sonucu dize oluşturucusunun geçerli örneğine ekler. |
| AppendJoin(Char, ReadOnlySpan<String>) |
Sağlanan yayılma alanının dizelerini birleştirir ve her dize arasında belirtilen karakter ayırıcısını kullanarak sonucu dize oluşturucusunun geçerli örneğine ekler. |
| AppendJoin(Char, String[]) |
Sağlanan dizinin dizelerini birleştirir ve her dize arasında belirtilen karakter ayırıcısını kullanarak sonucu dize oluşturucusunun geçerli örneğine ekler. |
| AppendJoin(String, Object[]) |
Sağlanan nesne dizisindeki öğelerin dize gösterimlerini birleştirir ve her üye arasında belirtilen ayırıcıyı kullanarak sonucu dize oluşturucusunun geçerli örneğine ekler. |
| AppendJoin(String, ReadOnlySpan<Object>) |
Her üye arasında belirtilen ayırıcıyı kullanarak nesnelerin sağlanan yayılma alanındaki öğelerin dize gösterimlerini birleştirir, ardından sonucu dize oluşturucusunun geçerli örneğine ekler. |
| AppendJoin(String, ReadOnlySpan<String>) |
Sağlanan yayılma alanının dizelerini birleştirir ve her dize arasındaki belirtilen ayırıcıyı kullanarak sonucu dize oluşturucusunun geçerli örneğine ekler. |
| AppendJoin(String, String[]) |
Sağlanan dizinin dizelerini birleştirir ve her dize arasındaki belirtilen ayırıcıyı kullanarak sonucu dize oluşturucusunun geçerli örneğine ekler. |
| AppendJoin<T>(Char, IEnumerable<T>) |
Her üye arasında belirtilen karakter ayırıcısını kullanarak bir koleksiyonun üyelerini birleştirir ve ekler. |
| AppendJoin<T>(String, IEnumerable<T>) |
Her üye arasında belirtilen ayırıcıyı kullanarak bir koleksiyonun üyelerini birleştirir ve ekler. |
| AppendLine() |
Varsayılan satır sonlandırıcısını geçerli StringBuilder nesnenin sonuna ekler. |
| AppendLine(IFormatProvider, StringBuilder+AppendInterpolatedStringHandler) |
Belirtilen biçimi kullanarak belirtilen ilişkilendirilmiş dizeyi ekler ve ardından varsayılan satır sonlandırıcısını geçerli StringBuilder nesnesinin sonuna ekler. |
| AppendLine(String) |
Belirtilen dizenin bir kopyasını ve ardından varsayılan satır sonlandırıcısını geçerli StringBuilder nesnenin sonuna ekler. |
| AppendLine(StringBuilder+AppendInterpolatedStringHandler) |
Belirtilen ilişkilendirilmiş dizeyi ve ardından varsayılan satır sonlandırıcısını geçerli StringBuilder nesnesinin sonuna ekler. |
| Clear() |
Geçerli StringBuilder örnekteki tüm karakterleri kaldırır. |
| CopyTo(Int32, Char[], Int32, Int32) |
Karakterleri bu örneğin belirtilen bir kesiminden hedef Char dizinin belirtilen kesimine kopyalar. |
| CopyTo(Int32, Span<Char>, Int32) |
Karakterleri bu örneğin belirtilen bir kesiminden hedef Char yayılmaya kopyalar. |
| EnsureCapacity(Int32) |
Bu örneğinin StringBuilder kapasitesinin en az belirtilen değer olmasını sağlar. |
| EnumerateRunes() |
Değiştirilebilir karakter dizesini temsil eder. Bu sınıf devralınamaz. |
| Equals(Object) |
Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Devralındığı yer: Object) |
| Equals(ReadOnlySpan<Char>) |
Bu örnekteki karakterlerin belirtilen salt okunur karakter aralığındaki karakterlere eşit olup olmadığını belirten bir değer döndürür. |
| Equals(StringBuilder) |
Bu örneğin belirtilen bir nesneye eşit olup olmadığını gösteren bir değer döndürür. |
| GetChunks() |
Bu |
| GetHashCode() |
Varsayılan karma işlevi işlevi görür. (Devralındığı yer: Object) |
| GetRuneAt(Int32) |
Değiştirilebilir karakter dizesini temsil eder. Bu sınıf devralınamaz. |
| GetType() |
Geçerli örneğin Type alır. (Devralındığı yer: Object) |
| Insert(Int32, Boolean) |
Bir Boole değerinin dize gösterimini belirtilen karakter konumunda bu örneğe ekler. |
| Insert(Int32, Byte) |
Belirtilen 8 bit işaretsiz tamsayının dize gösterimini belirtilen karakter konumunda bu örneğe ekler. |
| Insert(Int32, Char) |
Belirtilen bir Unicode karakterinin dize gösterimini belirtilen karakter konumunda bu örneğe ekler. |
| Insert(Int32, Char[], Int32, Int32) |
Belirtilen karakter konumundaki bu örneğe belirtilen Unicode karakterlerinin bir alt dizisinin dize gösterimini ekler. |
| Insert(Int32, Char[]) |
Belirtilen karakter konumundaki bu örneğe belirtilen Unicode karakter dizisinin dize gösterimini ekler. |
| Insert(Int32, Decimal) |
Belirtilen karakter konumunda bu örneğe ondalık bir sayının dize gösterimini ekler. |
| Insert(Int32, Double) |
Bu örneğe belirtilen karakter konumunda çift duyarlıklı kayan nokta sayısının dize gösterimini ekler. |
| Insert(Int32, Int16) |
Belirtilen karakter konumunda belirtilen 16 bit imzalı tamsayının dize gösterimini bu örneğe ekler. |
| Insert(Int32, Int32) |
Belirtilen karakter konumunda belirtilen 32 bit imzalı tamsayının dize gösterimini bu örneğe ekler. |
| Insert(Int32, Int64) |
Belirtilen karakter konumunda bu örneğe 64 bit imzalı tamsayının dize gösterimini ekler. |
| Insert(Int32, Object) |
Bir nesnenin dize gösterimini belirtilen karakter konumunda bu örneğe ekler. |
| Insert(Int32, ReadOnlySpan<Char>) |
Belirtilen karakter konumunda bu örneğe karakter sırasını ekler. |
| Insert(Int32, Rune) |
Değiştirilebilir karakter dizesini temsil eder. Bu sınıf devralınamaz. |
| Insert(Int32, SByte) |
Belirtilen karakter konumundaki bu örneğe belirtilen 8 bit imzalı tamsayının dize gösterimini ekler. |
| Insert(Int32, Single) |
Belirtilen karakter konumunda bu örneğe tek duyarlıklı kayan nokta sayısının dize gösterimini ekler. |
| Insert(Int32, String, Int32) |
Belirtilen karakter konumunda belirtilen dizenin bir veya daha fazla kopyasını bu örneğe ekler. |
| Insert(Int32, String) |
Belirtilen karakter konumunda bu örneğe bir dize ekler. |
| Insert(Int32, UInt16) |
Belirtilen karakter konumundaki bu örneğe 16 bit işaretsiz tamsayının dize gösterimini ekler. |
| Insert(Int32, UInt32) |
Belirtilen karakter konumundaki bu örneğe 32 bit işaretsiz tamsayının dize gösterimini ekler. |
| Insert(Int32, UInt64) |
Belirtilen karakter konumundaki bu örneğe 64 bit işaretsiz tamsayının dize gösterimini ekler. |
| MemberwiseClone() |
Geçerli Objectbasit bir kopyasını oluşturur. (Devralındığı yer: Object) |
| MoveChunks(StringBuilder) |
Değiştirilebilir karakter dizesini temsil eder. Bu sınıf devralınamaz. |
| Remove(Int32, Int32) |
Belirtilen karakter aralığını bu örnekten kaldırır. |
| Replace(Char, Char, Int32, Int32) |
Bu örneğin bir alt dizesi içinde, belirtilen bir karakterin tüm oluşumlarını başka bir belirtilen karakterle değiştirir. |
| Replace(Char, Char) |
Bu örnekte belirtilen bir karakterin tüm oluşumlarını başka bir belirtilen karakterle değiştirir. |
| Replace(ReadOnlySpan<Char>, ReadOnlySpan<Char>, Int32, Int32) |
Bir salt okunur karakter aralığının tüm örneklerini bu oluşturucunun bir bölümünde başka bir karakterle değiştirir. |
| Replace(ReadOnlySpan<Char>, ReadOnlySpan<Char>) |
Bir salt okunur karakter aralığının tüm örneklerini bu oluşturucudaki diğeriyle değiştirir. |
| Replace(Rune, Rune, Int32, Int32) |
Değiştirilebilir karakter dizesini temsil eder. Bu sınıf devralınamaz. |
| Replace(Rune, Rune) |
Değiştirilebilir karakter dizesini temsil eder. Bu sınıf devralınamaz. |
| Replace(String, String, Int32, Int32) |
Bu örneğin bir alt dizesi içinde belirtilen dizenin tüm oluşumlarını başka bir belirtilen dizeyle değiştirir. |
| Replace(String, String) |
Bu örnekte belirtilen dizenin tüm oluşumlarını başka bir belirtilen dizeyle değiştirir. |
| ToString() |
Bu örneğin değerini değerine Stringdönüştürür. |
| ToString(Int32, Int32) |
Bu örneğin alt dizesinin değerini değerine Stringdönüştürür. |
| TryGetRuneAt(Int32, Rune) |
Değiştirilebilir karakter dizesini temsil eder. Bu sınıf devralınamaz. |
Belirtik Arabirim Kullanımları
| Name | Description |
|---|---|
| ISerializable.GetObjectData(SerializationInfo, StreamingContext) |
Bir SerializationInfo nesneyi geçerli StringBuilder nesnenin seri durumdan çıkarılması için gereken verilerle doldurur. |
Uzantı Metotları
| Name | Description |
|---|---|
| Append(StringBuilder, StringSegment) |
verilen StringSegment değerini öğesine StringBuilderekler. |