StringBuilder StringBuilder StringBuilder StringBuilder Class

定義

可変型の文字列を表します。Represents a mutable string of characters. このクラスは継承できません。This class cannot be inherited.

public ref class StringBuilder sealed : System::Runtime::Serialization::ISerializable
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public sealed class StringBuilder : System.Runtime.Serialization.ISerializable
type StringBuilder = class
    interface ISerializable
Public NotInheritable Class StringBuilder
Implements ISerializable
継承
StringBuilderStringBuilderStringBuilderStringBuilder
属性
実装

StringBuilderクラスで定義されている多くのメソッドを呼び出す方法を次の例に示します。The following example shows how to call many of the methods defined by the StringBuilder class.

using namespace System;
using namespace System::Text;

int main()
{
    // Create a StringBuilder that expects to hold 50 characters.
    // Initialize the StringBuilder with "ABC".
    StringBuilder^ sb = gcnew StringBuilder("ABC", 50);

    // Append three characters (D, E, and F) to the end of the
    // StringBuilder.
    sb->Append(gcnew array<Char>{'D', 'E', 'F'});

    // Append a format string to the end of the StringBuilder.
    sb->AppendFormat("GHI{0}{1}", (Char)'J', (Char)'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
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
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

注釈

このクラスは、値が変更可能な一連の文字である文字列に似たオブジェクトを表します。This class represents a string-like object whose value is a mutable sequence of characters.

このセクションの内容:In this section:

String 型と StringBuilder 型The String and StringBuilder types

とはString両方とも文字のシーケンスを表しますが、異なる方法で実装されます。 StringBuilderAlthough StringBuilder and String both represent sequences of characters, they are implemented differently. Stringは変更できない型です。String is an immutable type. つまり、オブジェクトをString変更するために表示される各操作は、実際に新しい文字列を作成します。That is, each operation that appears to modify a String object actually creates a new string.

たとえば、次String.Concat C#の例のメソッドを呼び出すと、という名前valueの文字列変数の値が変更されます。For example, the call to the String.Concat method in the following C# example appears to change the value of a string variable named value. 実際には、 Concatメソッドは、 valueメソッドに渡されたvalueオブジェクトとは異なる値とアドレスを持つオブジェクトを返します。In fact, the Concat method returns a value object that has a different value and address from the value object that was passed to the method. この例は、 /unsafeコンパイラオプションを使用してコンパイルする必要があることに注意してください。Note that the example must be compiled using the /unsafe compiler option.

using System;

public class Example
{
   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

多数の文字列操作 (ループ内の文字列を何度も変更するアプリなど) を実行するルーチンでは、文字列を繰り返し変更すると、パフォーマンスが大幅に低下する可能性があります。For routines that perform extensive string manipulation (such as apps that modify a string numerous times in a loop), modifying a string repeatedly can exact a significant performance penalty. 代替手段は、変更StringBuilder可能な文字列クラスであるを使用することです。The alternative is to use StringBuilder, which is a mutable string class. 変更可能性とは、クラスのインスタンスが作成された後に、そのインスタンスを追加、削除、置換、または挿入することによって変更できることを意味します。Mutability means that once an instance of the class has been created, it can be modified by appending, removing, replacing, or inserting characters. オブジェクトStringBuilderは、文字列への展開に対応するためのバッファーを保持します。A StringBuilder object maintains a buffer to accommodate expansions to the string. 空き領域がある場合は、新しいデータがバッファーに追加されます。それ以外の場合は、新しい大きなバッファーが割り当てられ、元のバッファーのデータが新しいバッファーにコピーされます。その後、新しいデータが新しいバッファーに追加されます。New data is appended to the buffer if room is available; otherwise, a new, larger buffer is allocated, data from the original buffer is copied to the new buffer, and the new data is then appended to the new buffer.

重要

クラスは一般にStringクラスより優れたパフォーマンスを提供しますが、文字列をStringBuilder操作するときは常にを自動的に置き換えStringないようにしてください。 StringBuilderAlthough the StringBuilder class generally offers better performance than the String class, you should not automatically replace String with StringBuilder whenever you want to manipulate strings. パフォーマンスは、文字列のサイズ、新しい文字列に割り当てられるメモリの量、アプリが実行されているシステム、および操作の種類によって異なります。Performance depends on the size of the string, the amount of memory to be allocated for the new string, the system on which your app is executing, and the type of operation. 実際にパフォーマンスが大幅に向上するかどうかStringBuilderを判断するために、アプリをテストする準備ができている必要があります。You should be prepared to test your app to determine whether StringBuilder actually offers a significant performance improvement.

次の条件String下でクラスを使用することを検討してください。Consider using the String class under these conditions:

  • アプリが文字列に対して行う変更の数が少ない場合。When the number of changes that your app will make to a string is small. このような場合StringBuilder 、では、パフォーマンスがわずかにString低下するか、パフォーマンスが向上しない可能性があります。In these cases, StringBuilder might offer negligible or no performance improvement over String.

  • 特に文字列リテラルを使用して、固定された数の連結演算を実行する場合。When you are performing a fixed number of concatenation operations, particularly with string literals. この場合、コンパイラは連結操作を1つの操作に結合することがあります。In this case, the compiler might combine the concatenation operations into a single operation.

  • 文字列を構築するときに、広範な検索操作を実行する必要がある場合。When you have to perform extensive search operations while you are building your string. クラスStringBuilderIndexOfは、やStartsWithなどの検索メソッドがありません。The StringBuilder class lacks search methods such as IndexOf or StartsWith. これらの操作のためにStringBuilderStringオブジェクトをに変換する必要があります。これにより、をStringBuilder使用した場合のパフォーマンス上の利点が損なわれる可能性があります。You'll have to convert the StringBuilder object to a String for these operations, and this can negate the performance benefit from using StringBuilder. 詳細については、「 StringBuilder オブジェクト内のテキストの検索」セクションを参照してください。For more information, see the Searching the text in a StringBuilder object section.

次の条件StringBuilder下でクラスを使用することを検討してください。Consider using the StringBuilder class under these conditions:

  • アプリケーションで、デザイン時に文字列に対して不明な数の変更を加えることが予想される場合 (たとえば、ユーザー入力を含む文字列の数を連結するためにループを使用する場合など)。When you expect your app to make an unknown number of changes to a string at design time (for example, when you are using a loop to concatenate a random number of strings that contain user input).

  • アプリが文字列に大幅な変更を加えることが予想される場合。When you expect your app to make a significant number of changes to a string.

StringBuilder の動作How StringBuilder works

プロパティStringBuilder.Lengthは、オブジェクトにStringBuilder現在格納されている文字数を示します。The StringBuilder.Length property indicates the number of characters the StringBuilder object currently contains. StringBuilderオブジェクトに文字を追加した場合、その長さはStringBuilder.Capacityプロパティのサイズに達するまで増加します。これにより、オブジェクトに含めることができる文字数が定義されます。If you add characters to the StringBuilder object, its length increases until it equals the size of the StringBuilder.Capacity property, which defines the number of characters that the object can contain. 追加された文字の数によってStringBuilderオブジェクトの長さが現在の容量を超えた場合、新しいメモリが割り当てられ、 Capacityプロパティの値が2倍になりStringBuilder 、オブジェクトLengthに新しい文字が追加されます。プロパティが調整されます。If the number of added characters causes the length of the StringBuilder object to exceed its current capacity, new memory is allocated, the value of the Capacity property is doubled, new characters are added to the StringBuilder object, and its Length property is adjusted. StringBuilderオブジェクトの追加メモリは、 StringBuilder.MaxCapacityプロパティによって定義された値に達するまで、動的に割り当てられます。Additional memory for the StringBuilder object is allocated dynamically until it reaches the value defined by the StringBuilder.MaxCapacity property. 最大容量に達すると、そのStringBuilderオブジェクトに対してそれ以上のメモリを割り当てることができなくなります。また、最大容量を超えて文字を追加したり拡張したりしようとすると、 ArgumentOutOfRangeExceptionまたはOutOfMemoryExceptionのいずれかの例外がスローされます。When the maximum capacity is reached, no further memory can be allocated for the StringBuilder object, and trying to add characters or expand it beyond its maximum capacity throws either an ArgumentOutOfRangeException or an OutOfMemoryException exception.

次の例では、 StringBuilderオブジェクトに割り当てられた文字列が展開されるときに、オブジェクトが新しいメモリを割り当て、容量を動的に増やす方法を示します。The following example illustrates how a StringBuilder object allocates new memory and increases its capacity dynamically as the string assigned to the object expands. このコードではStringBuilder 、既定の (パラメーターなしの) コンストラクターを呼び出すことによってオブジェクトを作成します。The code creates a StringBuilder object by calling its default (parameterless) constructor. このオブジェクトの既定の容量は16文字で、最大容量は20億文字を超えています。The default capacity of this object is 16 characters, and its maximum capacity is more than 2 billion characters. "This is a 文." という文字列を追加します。Appending the string "This is a sentence." 文字列の長さ (19 文字) がStringBuilderオブジェクトの既定の容量を超えているため、新しいメモリが割り当てられます。results in a new memory allocation because the string length (19 characters) exceeds the default capacity of the StringBuilder object. オブジェクトの容量が2倍32になると、新しい文字列が追加され、オブジェクトの長さは19文字になります。The capacity of the object doubles to 32 characters, the new string is added, and the length of the object now equals 19 characters. このコードでは、"This は追加の文です。" という文字列を追加します。The code then appends the string "This is an additional sentence." StringBuilderオブジェクトの値を11回まで指定します。to the value of the StringBuilder object 11 times. 追加操作によってStringBuilderオブジェクトの長さがその容量を超えた場合、既存の容量が2倍Appendになり、操作が成功します。Whenever the append operation causes the length of the StringBuilder object to exceed its capacity, its existing capacity is doubled and the Append operation succeeds.

using System;
using System.Reflection;
using System.Text;

public class Example
{
   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
Imports System.Reflection
Imports System.Text

Module Example
   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

メモリ割り当てMemory allocation

StringBuilderオブジェクトの既定の容量は16文字で、既定の最大容量はInt32.MaxValueです。The default capacity of a StringBuilder object is 16 characters, and its default maximum capacity is Int32.MaxValue. これらの既定値は、 StringBuilder()コンストラクターとStringBuilder(String)コンストラクターを呼び出す場合に使用されます。These default values are used if you call the StringBuilder() and StringBuilder(String) constructors.

StringBuilderオブジェクトの初期容量は、次の方法で明示的に定義できます。You can explicitly define the initial capacity of a StringBuilder object in the following ways:

  • オブジェクトを作成するときStringBuilderに、パラメーターをcapacity含むコンストラクターのいずれかを呼び出します。By calling any of the StringBuilder constructors that includes a capacity parameter when you create the object.

  • StringBuilder.Capacity 既存StringBuilderのオブジェクトを展開するために、新しい値をプロパティに明示的に割り当てる。By explicitly assigning a new value to the StringBuilder.Capacity property to expand an existing StringBuilder object. 新しい容量が既存の容量よりも小さい場合、またはStringBuilderオブジェクトの最大容量よりも大きい場合、プロパティは例外をスローすることに注意してください。Note that the property throws an exception if the new capacity is less than the existing capacity or greater than the StringBuilder object's maximum capacity.

  • 新しい容量でStringBuilder.EnsureCapacityメソッドを呼び出します。By calling the StringBuilder.EnsureCapacity method with the new capacity. 新しい容量は、オブジェクトの最大容量をStringBuilder超えないようにする必要があります。The new capacity must not be greater than the StringBuilder object's maximum capacity. ただし、 Capacity EnsureCapacityプロパティへの代入とは異なり、必要な新しい容量が既存の容量よりも少ない場合、は例外をスローしません。この場合、メソッドの呼び出しは無効です。However, unlike an assignment to the Capacity property, EnsureCapacity does not throw an exception if the desired new capacity is less than the existing capacity; in this case, the method call has no effect.

コンストラクター呼び出しでStringBuilderオブジェクトに割り当てられた文字列の長さが、既定の容量または指定された容量をCapacity超えた場合、プロパティは、 valueパラメーターで指定された文字列の長さに設定されます。If the length of the string assigned to the StringBuilder object in the constructor call exceeds either the default capacity or the specified capacity, the Capacity property is set to the length of the string specified with the value parameter.

StringBuilderオブジェクトの最大容量は、 StringBuilder(Int32, Int32)コンストラクターを呼び出すことによって明示的に定義できます。You can explicitly define the maximum capacity of a StringBuilder object by calling the StringBuilder(Int32, Int32) constructor. MaxCapacityプロパティに新しい値を割り当てることによって最大容量を変更することはできません。これは読み取り専用であるためです。You can't change the maximum capacity by assigning a new value to the MaxCapacity property, because it is read-only.

前のセクションで示したように、既存の容量が不十分な場合は、追加のメモリがStringBuilder割り当てられ、オブジェクトの容量がMaxCapacityプロパティで定義されている値まで倍増します。As the previous section shows, whenever the existing capacity is inadequate, additional memory is allocated and the capacity of a StringBuilder object doubles up to the value defined by the MaxCapacity property.

一般に、既定の容量と最大容量は、ほとんどのアプリに適しています。In general, the default capacity and maximum capacity are adequate for most apps. 次の条件に該当する場合は、これらの値を設定することを検討してください。You might consider setting these values under the following conditions:

  • StringBuilderオブジェクトの最終的なサイズが非常に大きくなる可能性が高い場合、通常は数 mb を超えています。If the eventual size of the StringBuilder object is likely to grow exceedingly large, typically in excess of several megabytes. この場合、初期Capacityプロパティを非常に大きな値に設定することによって、メモリ再割り当てが過剰にならないようにすると、パフォーマンスが向上する場合があります。In this case, there may be some performance benefit from setting the initial Capacity property to a significantly high value to eliminate the need for too many memory reallocations.

  • アプリがメモリが限られているシステムで実行されている場合。If your app is running on a system with limited memory. この場合、メモリに制約された環境でMaxCapacity実行される可能性Int32.MaxValueのある大きな文字列をアプリが処理している場合は、プロパティをより小さい値に設定することを検討してください。In this case, you may want to consider setting the MaxCapacity property to less than Int32.MaxValue if your app is handling large strings that may cause it to execute in a memory-constrained environment.

StringBuilder オブジェクトのインスタンス化Instantiating a StringBuilder object

次の表StringBuilderに示すように、6つのオーバーロードされたクラスコンストラクターのいずれかを呼び出すことによって、オブジェクトをインスタンス化します。You instantiate a StringBuilder object by calling one of its six overloaded class constructors, which are listed in the following table. 3つのコンストラクターは、 StringBuilder値が空の文字列であるオブジェクトをインスタンス化CapacityMaxCapacityますが、との値を異なる方法で設定します。Three of the constructors instantiate a StringBuilder object whose value is an empty string, but set its Capacity and MaxCapacity values differently. 残りの3つのコンストラクター StringBuilderは、特定の文字列値と容量を持つオブジェクトを定義します。The remaining three constructors define a StringBuilder object that has a specific string value and capacity. 3つのコンストラクターのうちの2つは、 Int32.MaxValueの既定の最大容量を使用します。3番目のコンストラクターでは、最大容量を設定できます。Two of the three constructors use the default maximum capacity of Int32.MaxValue, whereas the third allows you to set the maximum capacity.

コンストラクターConstructor 文字列値String value 容量Capacity 最大容量Maximum capacity
StringBuilder() String.Empty 1616 Int32.MaxValue
StringBuilder(Int32) String.Empty パラメーターによっcapacityて定義されます。Defined by the capacity parameter Int32.MaxValue
StringBuilder(Int32, Int32) String.Empty パラメーターによっcapacityて定義されます。Defined by the capacity parameter パラメーターによっmaxCapacityて定義されます。Defined by the maxCapacity parameter
StringBuilder(String) パラメーターによっvalueて定義されます。Defined by the value parameter 16またvalueは。16 or value. Length、いずれか大きい方Length, whichever is greater Int32.MaxValue
StringBuilder(String, Int32) パラメーターによっvalueて定義されます。Defined by the value parameter capacityパラメーターまたはvalueによって定義されます。Defined by the capacity parameter or value. Lengthのいずれか大きい方。Length, whichever is greater. Int32.MaxValue
StringBuilder(String, Int32, Int32, Int32) value によって定義されます。Defined by value. Substring(startIndex, length)Substring(startIndex, length) capacityパラメーターまたはvalueによって定義されます。Defined by the capacity parameter or value. Lengthのいずれか大きい方。Length, whichever is greater. パラメーターによっmaxCapacityて定義されます。Defined by the maxCapacity parameter

次の例では、3つのコンストラクターオーバーロードStringBuilderを使用してオブジェクトをインスタンス化します。The following example uses three of these constructor overloads to instantiate StringBuilder objects.

using System;
using System.Text;

public class Example
{
   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: {0}", 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
Imports System.Text

Module Example
   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 メソッドの呼び出しCalling StringBuilder methods

StringBuilderインスタンス内の文字列を変更するメソッドのほとんどは、その同じインスタンスへの参照を返します。Most of the methods that modify the string in a StringBuilder instance return a reference to that same instance. これにより、次StringBuilderの2つの方法でメソッドを呼び出すことができます。This enables you to call StringBuilder methods in two ways:

  • 次の例に示すように、個々のメソッドを呼び出し、戻り値を無視することができます。You can make individual method calls and ignore the return value, as the following example does.

    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.
    
    Imports System.Text
    
    Module Example
       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.
    
  • 1つのステートメントで一連のメソッド呼び出しを行うことができます。You can make a series of method calls in a single statement. これは、連続する操作を連結する1つのステートメントを記述する場合に便利です。This can be convenient if you want to write a single statement that chains successive operations. 次の例では、前の例の3つのメソッド呼び出しを1行のコードに統合しています。The following example consolidates three method calls from the previous example into a single line of code.

    using System;
    using System.Text;
    
    public class Example
    {
       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.
    
    Imports System.Text
    
    Module Example
       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 操作の実行Performing StringBuilder operations

StringBuilderクラスのメソッドを使用して、 StringBuilderオブジェクト内の文字の反復、追加、削除、または変更を行うことができます。You can use the methods of the StringBuilder class to iterate, add, delete, or modify characters in a StringBuilder object.

StringBuilder 文字の反復処理Iterating StringBuilder characters

StringBuilderオブジェクト内の文字にアクセスするには、 StringBuilder.Chars[Int32]プロパティを使用します。You can access the characters in a StringBuilder object by using the StringBuilder.Chars[Int32] property. でC#はChars[Int32] 、はインデクサーです。 Visual Basic では、 StringBuilderクラスの既定のプロパティです。In C#, Chars[Int32] is an indexer; in Visual Basic, it is the default property of the StringBuilder class. これにより、 Chars[Int32]プロパティを明示的に参照せずに、インデックスのみを使用して個々の文字を設定または取得できます。This enables you to set or retrieve individual characters by using their index only, without explicitly referencing the Chars[Int32] property. StringBuilderオブジェクト内の文字は、インデックス 0 (ゼロ) から始まり、インデックスLength 1 に続きます。Characters in a StringBuilder object begin at index 0 (zero) and continue to index Length - 1.

次の例は、 Chars[Int32]プロパティを示しています。The following example illustrates the Chars[Int32] property. 10個のStringBuilder乱数をオブジェクトに追加し、各文字を反復処理します。It appends ten random numbers to a StringBuilder object, and then iterates each character. 文字の Unicode カテゴリがUnicodeCategory.DecimalDigitNumberの場合は、数を1つ減らします (または、値が0の場合は、数値を9に変更します)。If the character's Unicode category is UnicodeCategory.DecimalDigitNumber, it decreases the number by 1 (or changes the number to 9 if its value is 0). この例では、個々のStringBuilder文字の値が変更された前と後の両方のオブジェクトの内容を表示します。The example displays the contents of the StringBuilder object both before and after the values of individual characters were changed.

using System;
using System.Globalization;
using System.Text;

public class Example
{
   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
Imports System.Globalization
Imports System.Text

Module Example
   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

Chars[Int32] プロパティで文字ベースのインデックス付けを使用すると、次の条件下では非常に遅くなることがあります。Using character-based indexing with the Chars[Int32] property can be extremely slow under the following conditions:

  • StringBuilder インスタンスが大きい (たとえば、数万文字が含まれている)。The StringBuilder instance is large (for example, it consists of several tens of thousands of characters).
  • StringBuilder が "チャンク化" している。The StringBuilder is "chunky." つまり、StringBuilder.Append などのメソッドの反復的な呼び出しにより、オブジェクトの StringBuilder.Capacity プロパティが自動的に展開され、メモリの新しいチャンクがそれに割り当てられています。That is, repeated calls to methods such as StringBuilder.Append have automatically expanded the object's StringBuilder.Capacity property and allocated new chunks of memory to it.

文字にアクセスするたびに、チャンクのリンク リスト全体が走査されて、インデックスを付ける適切なバッファーが検索されるため、パフォーマンスが著しく低下します。Performance is severely impacted because each character access walks the entire linked list of chunks to find the correct buffer to index into.

注意

大きな "チャンク化" した StringBuilder オブジェクトの場合でも、1 つまたは少数の文字へのインデックス ベースのアクセスに Chars[Int32] プロパティを使うと、パフォーマンスへの影響はごくわずかです。通常、これは 0(n) 操作です。Even for a large "chunky" StringBuilder object, using the Chars[Int32] property for index-based access to one or a small number of characters has a negligible performance impact; typically, it is an 0(n) operation. StringBuilder オブジェクト内の文字を反復処理するときは、パフォーマンスに大きな影響が発生します。これは、O(n^2) 操作でます。The significant performance impact occurs when iterating the characters in the StringBuilder object, which is an O(n^2) operation.

StringBuilder オブジェクトで文字ベースのインデックス付けを使うときにパフォーマンスの問題が発生する場合は、次のいずれかの回避策を使うことができます。If you encounter performance issues when using character-based indexing with StringBuilder objects, you can use any of the following workarounds:

  • ToString メソッドを呼び出して StringBuilder インスタンスを String に変換した後、文字列内の文字にアクセスします。Convert the StringBuilder instance to a String by calling the ToString method, then access the characters in the string.

  • 既存の StringBuilder オブジェクトの内容を、事前にサイズを設定した新しい StringBuilder オブジェクトにコピーします。Copy the contents of the existing StringBuilder object to a new pre-sized StringBuilder object. 新しい StringBuilder オブジェクトはチャンク化していないため、パフォーマンスが向上します。Performance improves because the new StringBuilder object is not chunky. 次に例を示します。For example:

    // 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)
    
  • StringBuilder(Int32) コンストラクターを呼び出して、StringBuilder オブジェクトの初期容量を、予想される最大サイズにほぼ等しい値に設定します。Set the initial capacity of the StringBuilder object to a value that is approximately equal to its maximum expected size by calling the StringBuilder(Int32) constructor. このようにすると、StringBuilder が最大容量に達することがほとんどない場合であっても、メモリ ブロック全体が割り当てられることに注意してください。Note that this allocates the entire block of memory even if the StringBuilder rarely reaches its maximum capacity.

StringBuilder オブジェクトへのテキストの追加Adding text to a StringBuilder object

クラスStringBuilderには、 StringBuilderオブジェクトのコンテンツを拡張するための次のメソッドが含まれています。The StringBuilder class includes the following methods for expanding the contents of a StringBuilder object:

  • メソッドAppendは、文字列、部分文字列、文字配列、文字配列の一部、複数回繰り返される1文字、またはプリミティブデータ型の文字列形式をStringBuilderオブジェクトに追加します。The Append method appends a string, a substring, a character array, a portion of a character array, a single character repeated multiple times, or the string representation of a primitive data type to a StringBuilder object.

  • メソッドAppendLineは、行終端記号または文字列を行終端記号と共にStringBuilderオブジェクトに追加します。The AppendLine method appends a line terminator or a string along with a line terminator to a StringBuilder object.

  • メソッドAppendFormatは、 StringBuilder 複合書式指定文字列をオブジェクトに追加します。The AppendFormat method appends a composite format string to a StringBuilder object. 結果文字列に含まれるオブジェクトの文字列形式は、現在のシステムカルチャまたは指定されたカルチャの書式指定規則を反映できます。The string representations of objects included in the result string can reflect the formatting conventions of the current system culture or a specified culture.

  • メソッドInsertは、文字列、部分文字列、複数回の文字列の繰り返し、文字配列、文字配列の一部、またはStringBuilderオブジェクト内の指定された位置にあるプリミティブデータ型の文字列形式を挿入します。The Insert method inserts a string, a substring, multiple repetitions of a string, a character array, a portion of a character array, or the string representation of a primitive data type at a specified position in the StringBuilder object. 位置は、0から始まるインデックスによって定義されます。The position is defined by a zero-based index.

次の例ではAppend AppendFormatAppendLine、、、 Insert StringBuilderおよびの各メソッドを使用して、オブジェクトのテキストを展開します。The following example uses the Append, AppendLine, AppendFormat, and Insert methods to expand the text of a StringBuilder object.

using System;
using System.Text;

public class Example
{
   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, String.Format("{2}{0,12:X4} {1,12}{2}", "Code Unit", 
                                   "Character", "\n"));      

      // 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            <
Imports System.Text

Module Example
   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:X4} {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 オブジェクトからのテキストの削除Deleting text from a StringBuilder object

クラスStringBuilderには、現在StringBuilderのインスタンスのサイズを小さくすることができるメソッドが含まれています。The StringBuilder class includes methods that can reduce the size of the current StringBuilder instance. メソッドClearは、すべての文字を削除Lengthし、プロパティを0に設定します。The Clear method removes all characters and sets the Length property to zero. メソッドRemoveは、特定のインデックス位置を開始位置として、指定された数の文字を削除します。The Remove method deletes a specified number of characters starting at a particular index position. さらに、 Lengthプロパティを現在のインスタンスの長さよりもStringBuilder小さい値に設定することにより、オブジェクトの末尾から文字を削除できます。In addition, you can remove characters from the end of a StringBuilder object by setting its Length property to a value that is less than the length of the current instance.

次の例では、 StringBuilderオブジェクトから一部のテキストを削除し、その結果の容量、最大容量、および長さのプロパティ値を表示してから、メソッドをClear呼び出しStringBuilderて、オブジェクトからすべての文字を削除します。The following example removes some of the text from a StringBuilder object, displays its resulting capacity, maximum capacity, and length property values, and then calls the Clear method to remove all the characters from the StringBuilder object.

using System;
using System.Text;

public class Example
{
   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: {0}", 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
Imports System.Text

Module Example
   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
         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 オブジェクト内のテキストの変更Modifying the text in a StringBuilder object

メソッドは、オブジェクト全体StringBuilderまたは特定の文字範囲内の文字または文字列のすべての出現箇所を置き換えます。 StringBuilder.ReplaceThe StringBuilder.Replace method replaces all occurrences of a character or a string in the entire StringBuilder object or in a particular character range. 次の例ではReplace 、メソッドを使用して、 StringBuilderオブジェクト内のすべての感嘆符 (!) を疑問符 (?) に置き換えます。The following example uses the Replace method to replace all exclamation points (!) with question marks (?) in the StringBuilder object.

using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
      MyStringBuilder.Replace('!', '?');
      Console.WriteLine(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 オブジェクト内のテキストの検索Searching the text in a StringBuilder object

String.Contains String.IndexOfクラスにはString.StartsWith 、クラスStringによって提供される、、およびメソッドに似たメソッドは含まれません。これにより、オブジェクトで特定の文字または部分文字列を検索できます。 StringBuilderThe StringBuilder class does not include methods similar to the String.Contains, String.IndexOf, and String.StartsWith methods provided by the String class, which allow you to search the object for a particular character or a substring. 部分文字列の存在または開始文字の位置を特定するにはString 、文字列検索メソッドまたは正規表現メソッドを使用して値を検索する必要があります。Determining the presence or starting character position of a substring requires that you search a String value by using either a string search method or a regular expression method. このような検索を実装するには、次の表に示すように4つの方法があります。There are four ways to implement such searches, as the following table shows.

手法Technique 長所Pros 短所Cons
文字列値をStringBuilderオブジェクトに追加する前に検索します。Search string values before adding them to the StringBuilder object. 部分文字列が存在するかどうかを判断する場合に便利です。Useful for determining whether a substring exists. は、部分文字列のインデックス位置が重要な場合は使用できません。Cannot be used when the index position of a substring is important.
ToString呼び出し、返されStringたオブジェクトを検索します。Call ToString and search the returned String object. すべてのテキストをStringBuilderオブジェクトに割り当ててから変更を開始すると、使いやすくなります。Easy to use if you assign all the text to a StringBuilder object, and then begin to modify it. すべてのToString StringBuilderテキストがオブジェクトに追加される前に変更を行う必要がある場合は、を繰り返し呼び出すのは面倒です。Cumbersome to repeatedly call ToString if you must make modifications before all text is added to the StringBuilder object.

変更を行っている場合は、 StringBuilderオブジェクトのテキストの末尾から作業する必要があります。You must remember to work from the end of the StringBuilder object's text if you're making changes.
プロパティをChars[Int32]使用して、文字の範囲を順番に検索します。Use the Chars[Int32] property to sequentially search a range of characters. 個々の文字または小さい部分文字列に関心がある場合に便利です。Useful if you're concerned with individual characters or a small substring. 検索する文字数が多い場合、または検索ロジックが複雑な場合には煩雑です。Cumbersome if the number of characters to search is large or if the search logic is complex.

メソッドの呼び出しを繰り返すことによって非常に大きな増加したオブジェクトのパフォーマンスが非常に低下します。Results in very poor performance for objects that have grown very large through repeated method calls.
オブジェクトをオブジェクトにString変換し、オブジェクトに対して変更を実行します。 String StringBuilderConvert the StringBuilder object to a String object, and perform modifications on the String object. 変更の数が少ない場合に便利です。Useful if the number of modifications is small. 変更の数が多い場合StringBuilderは、クラスのパフォーマンス上の利点を否定します。Negates the performance benefit of the StringBuilder class if the number of modifications is large.

これらの手法についてさらに詳しく説明します。Let's examine these techniques in greater detail.

  • 検索の目的が特定の部分文字列が存在するかどうかを判断する場合 (つまり、部分文字列の位置に関心がない場合) は、文字列をStringBuilderオブジェクトに格納する前に検索できます。If the goal of the search is to determine whether a particular substring exists (that is, if you aren't interested in the position of the substring), you can search strings before storing them in the StringBuilder object. 次の例では、考えられる1つの実装を示します。The following example provides one possible implementation. このクラスはStringBuilderFinderStringBuilderオブジェクトへの参照と、文字列内で検索する部分文字列を渡すコンストラクターを持つクラスを定義します。It defines a StringBuilderFinder class whose constructor is passed a reference to a StringBuilder object and the substring to find in the string. この例では、記録された気温が華氏と摂氏のどちらであるかを判断し、 StringBuilderオブジェクトの先頭に適切な紹介文を追加します。In this case, the example tries to determine whether recorded temperatures are in Fahrenheit or Celsius, and adds the appropriate introductory text to the beginning of the StringBuilder object. ランダムな数値ジェネレーターを使用して、摂氏または華氏でデータを含む配列を選択します。A random number generator is used to select an array that contains data in either degrees Celsius or degrees Fahrenheit.

    using System;
    using System.Text;
    
    public class Example
    {
       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.9C
    
    Imports System.Text
    
    Module Example
       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.9C
    
  • StringBuilderオブジェクトをStringBuilder.ToString オブジェクトStringに変換するには、メソッドを呼び出します。Call the StringBuilder.ToString method to convert the StringBuilder object to a String object. String.LastIndexOfRegexなどのメソッドを使用して文字列を検索することも、正規表現とクラスを使用してパターンを検索することもできます。 String.StartsWithYou can search the string by using methods such as String.LastIndexOf or String.StartsWith, or you can use regular expressions and the Regex class to search for patterns. StringBuilderStringの両方のオブジェクトは、文字を格納するために utf-16 エンコードを使用するため、文字、部分文字列、および正規表現の一致のインデックス位置は、両方のオブジェクトで同じになります。Because both StringBuilder and String objects use UTF-16 encoding to store characters, the index positions of characters, substrings, and regular expression matches are the same in both objects. これにより、メソッドStringBuilderを使用して、 Stringそのテキストがオブジェクト内で見つかった同じ位置で変更を行うことができます。This enables you to use StringBuilder methods to make changes at the same position at which that text is found in the String object.

    注意

    この方法を採用する場合は、オブジェクトを文字列に繰り返しStringBuilder StringBuilder変換する必要がないように、オブジェクトの末尾から先頭まで作業する必要があります。If you adopt this approach, you should work from the end of the StringBuilder object to its beginning so that you don't have to repeatedly convert the StringBuilder object to a string.

    このアプローチの例を次に示します。The following example illustrates this approach. 英語のアルファベットの各文字がStringBuilderオブジェクトに4回格納されます。It stores four occurrences of each letter of the English alphabet in a StringBuilder object. 次に、テキストをStringオブジェクトに変換し、正規表現を使用して、各4文字のシーケンスの開始位置を識別します。It then converts the text to a String object and uses a regular expression to identify the starting position of each four-character sequence. 最後に、最初のシーケンスを除く4文字の各シーケンスの前にアンダースコアを追加し、シーケンスの最初の文字を大文字に変換します。Finally, it adds an underscore before each four-character sequence except for the first sequence, and converts the first character of the sequence to uppercase.

    using System;
    using System.Text;
    using System.Text.RegularExpressions;
    
    public class Example
    {
       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_Zzzz
    
    Imports System.Text
    Imports System.Text.RegularExpressions
    
    Module Example
       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_Zzzz
    
  • プロパティをStringBuilder.Chars[Int32]使用して、 StringBuilderオブジェクト内の文字の範囲を順番に検索します。Use the StringBuilder.Chars[Int32] property to sequentially search a range of characters in a StringBuilder object. 検索対象の文字数が多い場合や検索ロジックが特に複雑な場合、この方法は実用的ではない可能性があります。This approach may not be practical if the number of characters to be searched is large or the search logic is particularly complex. 非常に大きなチャンクStringBuilderを持つオブジェクトに対する文字単位のインデックスベースのアクセスによるパフォーマンスへの影響については、 StringBuilder.Chars[Int32]プロパティのドキュメントを参照してください。For the performance implications of character-by-character index-based access for very large, chunked StringBuilder objects, see the documentation for the StringBuilder.Chars[Int32] property.

    次の例は、前の例と同じ機能ですが、実装によって異なります。The following example is identical in functionality to the previous example but differs in implementation. この例でChars[Int32]は、プロパティを使用して、文字値がいつ変更されたかを検出し、その位置にアンダースコアを挿入し、新しいシーケンスの最初の文字を大文字に変換します。It uses the Chars[Int32] property to detect when a character value has changed, inserts an underscore at that position, and converts the first character in the new sequence to uppercase.

    using System;
    using System.Text;
    
    public class Example
    {
       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_Zzzz
    
    Imports System.Text
    
    Module Example
       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_Zzzz
    
  • 未変更のStringBuilderテキストをすべてオブジェクトに格納し、 StringBuilder.ToStringメソッドを呼び出してオブジェクトをStringオブジェクトに変換StringBuilderし、 Stringオブジェクトに対して変更を実行します。Store all the unmodified text in the StringBuilder object, call the StringBuilder.ToString method to convert the StringBuilder object to a String object, and perform the modifications on the String object. いくつかの変更がある場合は、この方法を使用できます。そうしないと、変更できない文字列を操作するコストが、 StringBuilderオブジェクトを使用する場合のパフォーマンス上の利点を否定する可能性があります。You can use this approach if you have only a few modifications; otherwise, the cost of working with immutable strings may negate the performance benefits of using a StringBuilder object.

    次の例は、前の2つの例と同じ機能を備えていますが、実装によって異なります。The following example is identical in functionality to the previous two examples but differs in implementation. StringBuilderオブジェクトを作成し、 Stringオブジェクトに変換した後、正規表現を使用して、文字列に対する残りのすべての変更を実行します。It creates a StringBuilder object, converts it to a String object, and then uses a regular expression to perform all remaining modifications on the string. メソッドRegex.Replace(String, String, MatchEvaluator)は、ラムダ式を使用して、一致するたびに置換を実行します。The Regex.Replace(String, String, MatchEvaluator) method uses a lambda expression to perform the replacement on each match.

    using System;
    using System.Text;
    using System.Text.RegularExpressions;
    
    public class Example
    {
       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_Zzzz
    
    Imports System.Text
    Imports System.Text.RegularExpressions
    
    Module Example
       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 オブジェクトを文字列に変換するConverting the StringBuilder object to a string

StringBuilder オブジェクトで表される文字列を String パラメーターを持つメソッドに渡すかそれをユーザー インターフェイスに表示するには、事前に StringBuilder オブジェクトを String オブジェクトに変換する必要があります。You must convert the StringBuilder object to a String object before you can pass the string represented by the StringBuilder object to a method that has a String parameter or display it in the user interface. この変換は、 StringBuilder.ToStringメソッドを呼び出すことによって実行します。You perform this conversion by calling the StringBuilder.ToString method. 例については、前の例を参照しToStringてください。このStringBuilder例では、メソッドを呼び出して、オブジェクトを正規表現メソッドに渡すことができるように、オブジェクトを文字列に変換します。For an illustration, see the previous example, which calls the ToString method to convert a StringBuilder object to a string so that it can be passed to a regular expression method.

注意 (呼び出し元)

.Net Core および .NET Framework 4.0 以降のStringBuilderバージョンでは、 StringBuilder(Int32, Int32)コンストラクターを呼び出すことによってオブジェクトをインスタンス化するときに、 StringBuilder MaxCapacityインスタンスの長さと容量の両方が、".In .NET Core and in the .NET Framework 4.0 and later versions, when you instantiate the StringBuilder object by calling the StringBuilder(Int32, Int32) constructor, both the length and the capacity of the StringBuilder instance can grow beyond the value of its MaxCapacity property. これは、特に、 Append(String)およびAppendFormat(String, Object)メソッドを呼び出して小さい文字列を追加する場合に発生することがあります。This can occur particularly when you call the Append(String) and AppendFormat(String, Object) methods to append small strings.

コンストラクター

StringBuilder() StringBuilder() StringBuilder() StringBuilder()

StringBuilder クラスの新しいインスタンスを初期化します。Initializes a new instance of the StringBuilder class.

StringBuilder(Int32) StringBuilder(Int32) StringBuilder(Int32) StringBuilder(Int32)

指定した容量を使用して、StringBuilder クラスの新しいインスタンスを初期化します。Initializes a new instance of the StringBuilder class using the specified capacity.

StringBuilder(Int32, Int32) StringBuilder(Int32, Int32) StringBuilder(Int32, Int32) StringBuilder(Int32, Int32)

指定した容量で始まり、指定した最大容量まで大きくなる StringBuilder クラスの新しいインスタンスを初期化します。Initializes a new instance of the StringBuilder class that starts with a specified capacity and can grow to a specified maximum.

StringBuilder(String) StringBuilder(String) StringBuilder(String) StringBuilder(String)

指定した文字列を使用して、StringBuilder クラスの新しいインスタンスを初期化します。Initializes a new instance of the StringBuilder class using the specified string.

StringBuilder(String, Int32) StringBuilder(String, Int32) StringBuilder(String, Int32) StringBuilder(String, Int32)

指定した文字列および容量を使用して、StringBuilder クラスの新しいインスタンスを初期化します。Initializes a new instance of the StringBuilder class using the specified string and capacity.

StringBuilder(String, Int32, Int32, Int32) StringBuilder(String, Int32, Int32, Int32) StringBuilder(String, Int32, Int32, Int32) StringBuilder(String, Int32, Int32, Int32)

指定した部分文字列および容量から StringBuilder クラスの新しいインスタンスを初期化します。Initializes a new instance of the StringBuilder class from the specified substring and capacity.

プロパティ

Capacity Capacity Capacity Capacity

現在のインスタンスによって割り当てられたメモリに格納できる最大文字数を取得または設定します。Gets or sets the maximum number of characters that can be contained in the memory allocated by the current instance.

Chars[Int32] Chars[Int32] Chars[Int32] Chars[Int32]

このインスタンス内の指定した文字位置の文字を取得または設定します。Gets or sets the character at the specified character position in this instance.

Length Length Length Length

現在の StringBuilder オブジェクトの長さを取得または設定します。Gets or sets the length of the current StringBuilder object.

MaxCapacity MaxCapacity MaxCapacity MaxCapacity

このインスタンスの最大容量を取得します。Gets the maximum capacity of this instance.

メソッド

Append(Boolean) Append(Boolean) Append(Boolean) Append(Boolean)

指定した Boolean 値の文字列形式をこのインスタンスに追加します。Appends the string representation of a specified Boolean value to this instance.

Append(Byte) Append(Byte) Append(Byte) Append(Byte)

指定した 8 ビット符号なし整数の文字列形式をこのインスタンスに追加します。Appends the string representation of a specified 8-bit unsigned integer to this instance.

Append(Char) Append(Char) Append(Char) Append(Char)

指定した Char オブジェクトの文字列形式をこのインスタンスに追加します。Appends the string representation of a specified Char object to this instance.

Append(Char*, Int32) Append(Char*, Int32) Append(Char*, Int32) Append(Char*, Int32)

指定したアドレスで始まる Unicode 文字の配列をこのインスタンスに追加します。Appends an array of Unicode characters starting at a specified address to this instance.

Append(Char, Int32) Append(Char, Int32) Append(Char, Int32) Append(Char, Int32)

Unicode 文字の文字列形式の、指定した数のコピーをこのインスタンスに追加します。Appends a specified number of copies of the string representation of a Unicode character to this instance.

Append(Char[]) Append(Char[]) Append(Char[]) Append(Char[])

指定した配列内の Unicode 文字の文字列形式をこのインスタンスに追加します。Appends the string representation of the Unicode characters in a specified array to this instance.

Append(Char[], Int32, Int32) Append(Char[], Int32, Int32) Append(Char[], Int32, Int32) Append(Char[], Int32, Int32)

Unicode 文字の指定した部分配列の文字列形式をこのインスタンスに追加します。Appends the string representation of a specified subarray of Unicode characters to this instance.

Append(Decimal) Append(Decimal) Append(Decimal) Append(Decimal)

指定した 10 進数の文字列形式をこのインスタンスに追加します。Appends the string representation of a specified decimal number to this instance.

Append(Double) Append(Double) Append(Double) Append(Double)

指定した倍精度浮動小数点数の文字列形式をこのインスタンスに追加します。Appends the string representation of a specified double-precision floating-point number to this instance.

Append(Int16) Append(Int16) Append(Int16) Append(Int16)

指定した 16 ビット符号付き整数の文字列形式をこのインスタンスに追加します。Appends the string representation of a specified 16-bit signed integer to this instance.

Append(Int32) Append(Int32) Append(Int32) Append(Int32)

指定した 32 ビット符号付き整数の文字列形式をこのインスタンスに追加します。Appends the string representation of a specified 32-bit signed integer to this instance.

Append(Int64) Append(Int64) Append(Int64) Append(Int64)

指定した 64 ビット符号付き整数の文字列形式をこのインスタンスに追加します。Appends the string representation of a specified 64-bit signed integer to this instance.

Append(Object) Append(Object) Append(Object) Append(Object)

指定したオブジェクトの文字列形式をこのインスタンスに追加します。Appends the string representation of a specified object to this instance.

Append(ReadOnlyMemory<Char>) Append(ReadOnlyMemory<Char>) Append(ReadOnlyMemory<Char>) Append(ReadOnlyMemory<Char>)

指定された読み取り専用文字メモリ領域の文字列形式をこのインスタンスに追加します。Appends the string representation of a specified read-only character memory region to this instance.

Append(ReadOnlySpan<Char>) Append(ReadOnlySpan<Char>) Append(ReadOnlySpan<Char>) Append(ReadOnlySpan<Char>)

指定された読み取り専用文字スパンの文字列形式をこのインスタンスに追加します。Appends the string representation of a specified read-only character span to this instance.

Append(SByte) Append(SByte) Append(SByte) Append(SByte)

指定した 8 ビット符号付き整数の文字列形式をこのインスタンスに追加します。Appends the string representation of a specified 8-bit signed integer to this instance.

Append(Single) Append(Single) Append(Single) Append(Single)

指定した単精度浮動小数点数の文字列形式をこのインスタンスに追加します。Appends the string representation of a specified single-precision floating-point number to this instance.

Append(String) Append(String) Append(String) Append(String)

指定した文字列のコピーをこのインスタンスに追加します。Appends a copy of the specified string to this instance.

Append(String, Int32, Int32) Append(String, Int32, Int32) Append(String, Int32, Int32) Append(String, Int32, Int32)

指定した部分文字列のコピーをこのインスタンスに追加します。Appends a copy of a specified substring to this instance.

Append(StringBuilder) Append(StringBuilder) Append(StringBuilder) Append(StringBuilder)

指定された文字列ビルダーの文字列形式をこのインスタンスに追加します。Appends the string representation of a specified string builder to this instance.

Append(StringBuilder, Int32, Int32) Append(StringBuilder, Int32, Int32) Append(StringBuilder, Int32, Int32) Append(StringBuilder, Int32, Int32)

指定された文字列ビルダー内の部分文字列のコピーをこのインスタンスに追加します。Appends a copy of a substring within a specified string builder to this instance.

Append(UInt16) Append(UInt16) Append(UInt16) Append(UInt16)

指定した 16 ビット符号なし整数の文字列形式をこのインスタンスに追加します。Appends the string representation of a specified 16-bit unsigned integer to this instance.

Append(UInt32) Append(UInt32) Append(UInt32) Append(UInt32)

指定された 32 ビット符号なし整数の文字列表記をこのインスタンスに追加します。Appends the string representation of a specified 32-bit unsigned integer to this instance.

Append(UInt64) Append(UInt64) Append(UInt64) Append(UInt64)

指定した 64 ビット符号なし整数の文字列形式をこのインスタンスに追加します。Appends the string representation of a specified 64-bit unsigned integer to this instance.

AppendFormat(IFormatProvider, String, Object) AppendFormat(IFormatProvider, String, Object) AppendFormat(IFormatProvider, String, Object) AppendFormat(IFormatProvider, String, Object)

0 個以上の書式項目を含んでいる複合書式指定文字列を処理することで返される文字列を、このインスタンスに追加します。Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. 各書式指定項目は、指定された書式プロバイダーを使用して単一の引数の文字列形式に置換されます。Each format item is replaced by the string representation of a single argument using a specified format provider.

AppendFormat(IFormatProvider, String, Object, Object) AppendFormat(IFormatProvider, String, Object, Object) AppendFormat(IFormatProvider, String, Object, Object) AppendFormat(IFormatProvider, String, Object, Object)

0 個以上の書式項目を含んでいる複合書式指定文字列を処理することで返される文字列を、このインスタンスに追加します。Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. 各書式項目は、指定された書式プロバイダーを使用して 2 つの引数のいずれかの文字列形式に置換されます。Each format item is replaced by the string representation of either of two arguments using a specified format provider.

AppendFormat(IFormatProvider, String, Object, Object, Object) AppendFormat(IFormatProvider, String, Object, Object, Object) AppendFormat(IFormatProvider, String, Object, Object, Object) AppendFormat(IFormatProvider, String, Object, Object, Object)

0 個以上の書式項目を含んでいる複合書式指定文字列を処理することで返される文字列を、このインスタンスに追加します。Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. 各書式項目は、指定された書式プロバイダーを使用して 3 つの引数のいずれかの文字列形式に置換されます。各書式項目は、指定された書式プロバイダーを使用して 3 つの引数のいずれかの文字列形式に置換されます。Each format item is replaced by the string representation of either of three arguments using a specified format provider.

AppendFormat(IFormatProvider, String, Object[]) AppendFormat(IFormatProvider, String, Object[]) AppendFormat(IFormatProvider, String, Object[]) AppendFormat(IFormatProvider, String, Object[])

0 個以上の書式項目を含んでいる複合書式指定文字列を処理することで返される文字列を、このインスタンスに追加します。Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. 各書式項目は、指定された書式プロバイダーを使用した、パラメーター配列内の対応する引数の文字列形式に置換されます。Each format item is replaced by the string representation of a corresponding argument in a parameter array using a specified format provider.

AppendFormat(String, Object) AppendFormat(String, Object) AppendFormat(String, Object) AppendFormat(String, Object)

0 個以上の書式項目を含んでいる複合書式指定文字列を処理することで返される文字列を、このインスタンスに追加します。Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. 各書式項目は、単一の引数の文字列表記に置換されます。Each format item is replaced by the string representation of a single argument.

AppendFormat(String, Object, Object) AppendFormat(String, Object, Object) AppendFormat(String, Object, Object) AppendFormat(String, Object, Object)

0 個以上の書式項目を含んでいる複合書式指定文字列を処理することで返される文字列を、このインスタンスに追加します。Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. 各書式項目は、2 つの引数のどちらかの文字列形式に置換されます。Each format item is replaced by the string representation of either of two arguments.

AppendFormat(String, Object, Object, Object) AppendFormat(String, Object, Object, Object) AppendFormat(String, Object, Object, Object) AppendFormat(String, Object, Object, Object)

0 個以上の書式項目を含んでいる複合書式指定文字列を処理することで返される文字列を、このインスタンスに追加します。Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. 各書式項目は、3 つの引数のいずれかの文字列形式に置換されます。Each format item is replaced by the string representation of either of three arguments.

AppendFormat(String, Object[]) AppendFormat(String, Object[]) AppendFormat(String, Object[]) AppendFormat(String, Object[])

0 個以上の書式項目を含んでいる複合書式指定文字列を処理することで返される文字列を、このインスタンスに追加します。Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. 各書式項目は、パラメーター配列内の対応する引数の文字列形式に置換されます。Each format item is replaced by the string representation of a corresponding argument in a parameter array.

AppendJoin(Char, Object[]) AppendJoin(Char, Object[]) AppendJoin(Char, Object[]) AppendJoin(Char, Object[])
AppendJoin(Char, String[]) AppendJoin(Char, String[]) AppendJoin(Char, String[]) AppendJoin(Char, String[])
AppendJoin(String, Object[]) AppendJoin(String, Object[]) AppendJoin(String, Object[]) AppendJoin(String, Object[])
AppendJoin(String, String[]) AppendJoin(String, String[]) AppendJoin(String, String[]) AppendJoin(String, String[])
AppendJoin<T>(Char, IEnumerable<T>) AppendJoin<T>(Char, IEnumerable<T>) AppendJoin<T>(Char, IEnumerable<T>) AppendJoin<T>(Char, IEnumerable<T>)
AppendJoin<T>(String, IEnumerable<T>) AppendJoin<T>(String, IEnumerable<T>) AppendJoin<T>(String, IEnumerable<T>) AppendJoin<T>(String, IEnumerable<T>)
AppendLine() AppendLine() AppendLine() AppendLine()

既定の行終端記号を現在の StringBuilder オブジェクトの末尾に追加します。Appends the default line terminator to the end of the current StringBuilder object.

AppendLine(String) AppendLine(String) AppendLine(String) AppendLine(String)

指定した文字列のコピーと既定の行終端記号を、現在の StringBuilder オブジェクトの末尾に追加します。Appends a copy of the specified string followed by the default line terminator to the end of the current StringBuilder object.

Clear() Clear() Clear() Clear()

現在の StringBuilder インスタンスからすべての文字を削除します。Removes all characters from the current StringBuilder instance.

CopyTo(Int32, Char[], Int32, Int32) CopyTo(Int32, Char[], Int32, Int32) CopyTo(Int32, Char[], Int32, Int32) CopyTo(Int32, Char[], Int32, Int32)

このインスタンスの指定したセグメントにある文字を、目的の Char 配列の指定したセグメントにコピーします。Copies the characters from a specified segment of this instance to a specified segment of a destination Char array.

CopyTo(Int32, Span<Char>, Int32) CopyTo(Int32, Span<Char>, Int32) CopyTo(Int32, Span<Char>, Int32) CopyTo(Int32, Span<Char>, Int32)
EnsureCapacity(Int32) EnsureCapacity(Int32) EnsureCapacity(Int32) EnsureCapacity(Int32)

このインスタンスの StringBuilder の容量が、指定した値以上になるようにします。Ensures that the capacity of this instance of StringBuilder is at least the specified value.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

(Inherited from Object)
Equals(ReadOnlySpan<Char>) Equals(ReadOnlySpan<Char>) Equals(ReadOnlySpan<Char>) Equals(ReadOnlySpan<Char>)

このインスタンスの文字が、指定された読み取り専用の文字範囲内の文字と同じであるかどうかを示す値を返します。Returns a value indicating whether the characters in this instance are equal to the characters in a specified read-only character span.

Equals(StringBuilder) Equals(StringBuilder) Equals(StringBuilder) Equals(StringBuilder)

このインスタンスが指定されたオブジェクトに等しいかどうかを示す値を返します。Returns a value indicating whether this instance is equal to a specified object.

GetChunks() GetChunks() GetChunks() GetChunks()

この StringBuilder インスタンスから作成された ReadOnlyMemory<Char> で表される文字のチャンクを反復処理する目的で利用できるオブジェクトを返します。Returns an object that can be used to iterate through the chunks of characters represented in a ReadOnlyMemory<Char> created from this StringBuilder instance.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(Inherited from Object)
Insert(Int32, Boolean) Insert(Int32, Boolean) Insert(Int32, Boolean) Insert(Int32, Boolean)

Boolean 値の文字列形式をこのインスタンスの指定した文字位置に挿入します。Inserts the string representation of a Boolean value into this instance at the specified character position.

Insert(Int32, Byte) Insert(Int32, Byte) Insert(Int32, Byte) Insert(Int32, Byte)

指定した 8 ビット符号なし整数の文字列形式をこのインスタンスの指定した文字位置に挿入します。Inserts the string representation of a specified 8-bit unsigned integer into this instance at the specified character position.

Insert(Int32, Char) Insert(Int32, Char) Insert(Int32, Char) Insert(Int32, Char)

指定した Unicode 文字の文字列形式をこのインスタンスの指定した文字位置に挿入します。Inserts the string representation of a specified Unicode character into this instance at the specified character position.

Insert(Int32, Char[]) Insert(Int32, Char[]) Insert(Int32, Char[]) Insert(Int32, Char[])

指定した Unicode 文字の配列の文字列形式をこのインスタンスの指定した文字位置に挿入します。Inserts the string representation of a specified array of Unicode characters into this instance at the specified character position.

Insert(Int32, Char[], Int32, Int32) Insert(Int32, Char[], Int32, Int32) Insert(Int32, Char[], Int32, Int32) Insert(Int32, Char[], Int32, Int32)

Unicode 文字の指定した部分配列の文字列形式をこのインスタンスの指定した文字位置に挿入します。Inserts the string representation of a specified subarray of Unicode characters into this instance at the specified character position.

Insert(Int32, Decimal) Insert(Int32, Decimal) Insert(Int32, Decimal) Insert(Int32, Decimal)

10 進数の文字列形式をこのインスタンスの指定した文字位置に挿入します。Inserts the string representation of a decimal number into this instance at the specified character position.

Insert(Int32, Double) Insert(Int32, Double) Insert(Int32, Double) Insert(Int32, Double)

倍精度浮動小数点数の文字列形式をこのインスタンスの指定した文字位置に挿入します。Inserts the string representation of a double-precision floating-point number into this instance at the specified character position.

Insert(Int32, Int16) Insert(Int32, Int16) Insert(Int32, Int16) Insert(Int32, Int16)

指定した 16 ビット符号付き整数の文字列形式をこのインスタンスの指定した文字位置に挿入します。Inserts the string representation of a specified 16-bit signed integer into this instance at the specified character position.

Insert(Int32, Int32) Insert(Int32, Int32) Insert(Int32, Int32) Insert(Int32, Int32)

指定した 32 ビット符号付き整数の文字列形式をこのインスタンスの指定した文字位置に挿入します。Inserts the string representation of a specified 32-bit signed integer into this instance at the specified character position.

Insert(Int32, Int64) Insert(Int32, Int64) Insert(Int32, Int64) Insert(Int32, Int64)

64 ビット符号付き整数の文字列形式をこのインスタンスの指定した文字位置に挿入します。Inserts the string representation of a 64-bit signed integer into this instance at the specified character position.

Insert(Int32, Object) Insert(Int32, Object) Insert(Int32, Object) Insert(Int32, Object)

オブジェクトの文字列形式をこのインスタンスの指定した文字位置に挿入します。Inserts the string representation of an object into this instance at the specified character position.

Insert(Int32, ReadOnlySpan<Char>) Insert(Int32, ReadOnlySpan<Char>) Insert(Int32, ReadOnlySpan<Char>) Insert(Int32, ReadOnlySpan<Char>)
Insert(Int32, SByte) Insert(Int32, SByte) Insert(Int32, SByte) Insert(Int32, SByte)

指定した 8 ビット符号付き整数の文字列形式をこのインスタンスの指定した文字位置に挿入します。Inserts the string representation of a specified 8-bit signed integer into this instance at the specified character position.

Insert(Int32, Single) Insert(Int32, Single) Insert(Int32, Single) Insert(Int32, Single)

単精度浮動小数点数の文字列形式をこのインスタンスの指定した文字位置に挿入します。Inserts the string representation of a single-precision floating point number into this instance at the specified character position.

Insert(Int32, String) Insert(Int32, String) Insert(Int32, String) Insert(Int32, String)

文字列をこのインスタンスの指定した文字位置に挿入します。Inserts a string into this instance at the specified character position.

Insert(Int32, String, Int32) Insert(Int32, String, Int32) Insert(Int32, String, Int32) Insert(Int32, String, Int32)

指定した文字列の 1 つ以上のコピーをこのインスタンスの指定した文字位置に挿入します。Inserts one or more copies of a specified string into this instance at the specified character position.

Insert(Int32, UInt16) Insert(Int32, UInt16) Insert(Int32, UInt16) Insert(Int32, UInt16)

16 ビット符号なし整数の文字列形式をこのインスタンスの指定した文字位置に挿入します。Inserts the string representation of a 16-bit unsigned integer into this instance at the specified character position.

Insert(Int32, UInt32) Insert(Int32, UInt32) Insert(Int32, UInt32) Insert(Int32, UInt32)

32 ビット符号なし整数の文字列形式をこのインスタンスの指定した文字位置に挿入します。Inserts the string representation of a 32-bit unsigned integer into this instance at the specified character position.

Insert(Int32, UInt64) Insert(Int32, UInt64) Insert(Int32, UInt64) Insert(Int32, UInt64)

64 ビット符号なし整数の文字列形式をこのインスタンスの指定した文字位置に挿入します。Inserts the string representation of a 64-bit unsigned integer into this instance at the specified character position.

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(Inherited from Object)
Remove(Int32, Int32) Remove(Int32, Int32) Remove(Int32, Int32) Remove(Int32, Int32)

このインスタンスから、指定した範囲の文字を削除します。Removes the specified range of characters from this instance.

Replace(Char, Char) Replace(Char, Char) Replace(Char, Char) Replace(Char, Char)

このインスタンスに出現する指定文字をすべて、別に指定した文字に置換します。Replaces all occurrences of a specified character in this instance with another specified character.

Replace(Char, Char, Int32, Int32) Replace(Char, Char, Int32, Int32) Replace(Char, Char, Int32, Int32) Replace(Char, Char, Int32, Int32)

このインスタンスの部分文字列に出現するすべての指定した文字を、別の指定した文字に置換します。Replaces, within a substring of this instance, all occurrences of a specified character with another specified character.

Replace(String, String) Replace(String, String) Replace(String, String) Replace(String, String)

このインスタンスに出現するすべての指定した文字列を、別の指定した文字列に置換します。Replaces all occurrences of a specified string in this instance with another specified string.

Replace(String, String, Int32, Int32) Replace(String, String, Int32, Int32) Replace(String, String, Int32, Int32) Replace(String, String, Int32, Int32)

このインスタンスの部分文字列に出現するすべての指定した文字列を、別の指定した文字列に置換します。Replaces, within a substring of this instance, all occurrences of a specified string with another specified string.

ToString() ToString() ToString() ToString()

このインスタンスの値を String に変換します。Converts the value of this instance to a String.

ToString(Int32, Int32) ToString(Int32, Int32) ToString(Int32, Int32) ToString(Int32, Int32)

このインスタンスの部分文字列の値を String に変換します。Converts the value of a substring of this instance to a String.

明示的なインターフェイスの実装

ISerializable.GetObjectData(SerializationInfo, StreamingContext) ISerializable.GetObjectData(SerializationInfo, StreamingContext) ISerializable.GetObjectData(SerializationInfo, StreamingContext) ISerializable.GetObjectData(SerializationInfo, StreamingContext)

SerializationInfo オブジェクトに、現在の StringBuilder オブジェクトの逆シリアル化に必要なデータを入力します。Populates a SerializationInfo object with the data necessary to deserialize the current StringBuilder object.

適用対象

こちらもご覧ください