このページは役に立ちましたか。
このページのコンテンツについての ご意見をお待ちしております
その他にご意見はありますか。
残り 1500 文字
StringBuilder クラス
この記事は機械翻訳されたものです。 記事の文章にポインターを重ねると、原文のテキストが表示されます。 詳細情報
訳文
原文

StringBuilder クラス

可変型の文字列を表します。 このクラスは継承できません。

System.Object
  System.Text.StringBuilder

名前空間:  System.Text
アセンブリ:  mscorlib (mscorlib.dll 内)

[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class StringBuilder : ISerializable

StringBuilder 型で公開されるメンバーは以下のとおりです。

  名前説明
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETStringBuilder() StringBuilder クラスの新しいインスタンスを初期化します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETStringBuilder(Int32)指定した容量を使用して、StringBuilder クラスの新しいインスタンスを初期化します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETStringBuilder(String)指定した文字列を使用して、StringBuilder クラスの新しいインスタンスを初期化します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETStringBuilder(Int32, Int32)指定した容量で始まり、指定した最大容量まで大きくなる StringBuilder クラスの新しいインスタンスを初期化します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETStringBuilder(String, Int32)指定した文字列および容量を使用して、StringBuilder クラスの新しいインスタンスを初期化します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETStringBuilder(String, Int32, Int32, Int32)指定した部分文字列および容量から StringBuilder クラスの新しいインスタンスを初期化します。
このページのトップへ

  名前説明
パブリック プロパティXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETCapacity現在のインスタンスによって割り当てられたメモリに格納できる最大文字数を取得または設定します。
パブリック プロパティXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETCharsこのインスタンス内の指定した文字位置の文字を取得または設定します。
パブリック プロパティXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETLength現在の StringBuilder オブジェクトの長さを取得または設定します。
パブリック プロパティ汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETMaxCapacityこのインスタンスの最大容量を取得します。
このページのトップへ

  名前説明
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppend(Boolean)指定した Boolean 値の文字列形式をこのインスタンスに追加します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppend(Byte)指定した 8 ビット符号なし整数の文字列形式をこのインスタンスに追加します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppend(Char)指定した Unicode 文字の文字列形式をこのインスタンスに追加します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppend(Char[])指定した配列内の Unicode 文字の文字列形式をこのインスタンスに追加します。
パブリック メソッド汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppend(Decimal)指定した 10 進数の文字列形式をこのインスタンスに追加します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppend(Double)指定した倍精度浮動小数点数の文字列形式をこのインスタンスに追加します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppend(Int16)指定した 16 ビット符号付き整数の文字列形式をこのインスタンスに追加します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppend(Int32)指定した 32 ビット符号付き整数の文字列形式をこのインスタンスに追加します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppend(Int64)指定した 64 ビット符号付き整数の文字列形式をこのインスタンスに追加します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppend(Object)指定したオブジェクトの文字列形式をこのインスタンスに追加します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppend(SByte)指定した 8 ビット符号付き整数の文字列形式をこのインスタンスに追加します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppend(Single)指定した単精度浮動小数点数の文字列形式をこのインスタンスに追加します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppend(String)指定した文字列のコピーをこのインスタンスに追加します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppend(UInt16)指定した 16 ビット符号なし整数の文字列形式をこのインスタンスに追加します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppend(UInt32)指定した 32 ビット符号なし整数の文字列形式をこのインスタンスに追加します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppend(UInt64)指定した 64 ビット符号なし整数の文字列形式をこのインスタンスに追加します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppend(Char, Int32)Unicode 文字の文字列形式の、指定した数のコピーをこのインスタンスに追加します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppend(Char[], Int32, Int32)Unicode 文字の指定した部分配列の文字列形式をこのインスタンスに追加します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppend(String, Int32, Int32)指定した部分文字列のコピーをこのインスタンスに追加します。
パブリック メソッドAppendFormat(String, Object)0 個以上の書式項目を含んでいる複合書式指定文字列を処理することで返される文字列を、このインスタンスに付加します。 各書式指定項目は、単一の引数の文字列形式に置換されます。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppendFormat(String, Object[])0 個以上の書式項目を含んでいる複合書式指定文字列を処理することで返される文字列を、このインスタンスに付加します。 各書式項目は、パラメーター配列内の対応するオブジェクト引数の文字列形式に置換されます。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppendFormat(IFormatProvider, String, Object[])0 個以上の書式項目を含んでいる複合書式指定文字列を処理することで返される文字列を、このインスタンスに付加します。 各書式項目は、指定された書式プロバイダーを使用した、パラメーター配列内の対応する引数の文字列形式に置換されます。
パブリック メソッドAppendFormat(String, Object, Object)0 個以上の書式項目を含んでいる複合書式指定文字列を処理することで返される文字列を、このインスタンスに付加します。 各書式指定項目は、2 つの引数のどちらかの文字列形式に置換されます。
パブリック メソッドAppendFormat(String, Object, Object, Object)0 個以上の書式項目を含んでいる複合書式指定文字列を処理することで返される文字列を、このインスタンスに付加します。 各書式指定項目は、3 つの引数のいずれかの文字列形式に置換されます。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppendLine()既定の行終端記号を現在の StringBuilder オブジェクトの末尾に追加します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETAppendLine(String)指定した文字列のコピーと既定の行終端記号を、現在の StringBuilder オブジェクトの末尾に追加します。
パブリック メソッド汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETClear現在の StringBuilder インスタンスからすべての文字を削除します。
パブリック メソッド汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETCopyToこのインスタンスの指定したセグメントにある文字を、特定の Char 配列の指定したセグメントにコピーします。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETEnsureCapacityこのインスタンスの StringBuilder の容量が、指定した値以上になるようにします。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETEquals(Object)指定のオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (Object から継承されます。)
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETEquals(StringBuilder)対象のインスタンスが、指定したオブジェクトに等しいかどうかを示す値を返します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETGetHashCode既定のハッシュ関数として機能します。 (Object から継承されます。)
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETGetType現在のインスタンスの Type を取得します。 (Object から継承されます。)
パブリック メソッド汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETInsert(Int32, Boolean)Boolean 値の文字列形式をこのインスタンスの指定した文字位置に挿入します。
パブリック メソッド汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETInsert(Int32, Byte)指定した 8 ビット符号なし整数の文字列形式をこのインスタンスの指定した文字位置に挿入します。
パブリック メソッド汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETInsert(Int32, Char)指定した Unicode 文字の文字列形式をこのインスタンスの指定した文字位置に挿入します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETInsert(Int32, Char[])指定した Unicode 文字の配列の文字列形式をこのインスタンスの指定した文字位置に挿入します。
パブリック メソッド汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETInsert(Int32, Decimal)10 進数の文字列形式をこのインスタンスの指定した文字位置に挿入します。
パブリック メソッド汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETInsert(Int32, Double)倍精度浮動小数点数の文字列形式をこのインスタンスの指定した文字位置に挿入します。
パブリック メソッド汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETInsert(Int32, Int16)指定した 16 ビット符号付き整数の文字列形式をこのインスタンスの指定した文字位置に挿入します。
パブリック メソッド汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETInsert(Int32, Int32)指定した 32 ビット符号付き整数の文字列形式をこのインスタンスの指定した文字位置に挿入します。
パブリック メソッド汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETInsert(Int32, Int64)64 ビット符号付き整数の文字列形式をこのインスタンスの指定した文字位置に挿入します。
パブリック メソッド汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETInsert(Int32, Object)オブジェクトの文字列形式をこのインスタンスの指定した文字位置に挿入します。
パブリック メソッド汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETInsert(Int32, SByte)指定した 8 ビット符号付き整数の文字列形式をこのインスタンスの指定した文字位置に挿入します。
パブリック メソッド汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETInsert(Int32, Single)単精度浮動小数点数の文字列形式をこのインスタンスの指定した文字位置に挿入します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETInsert(Int32, String)文字列をこのインスタンスの指定した文字位置に挿入します。
パブリック メソッド汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETInsert(Int32, UInt16)16 ビット符号なし整数の文字列形式をこのインスタンスの指定した文字位置に挿入します。
パブリック メソッド汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETInsert(Int32, UInt32)32 ビット符号なし整数の文字列形式をこのインスタンスの指定した文字位置に挿入します。
パブリック メソッド汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETInsert(Int32, UInt64)64 ビット符号なし整数の文字列形式をこのインスタンスの指定した文字位置に挿入します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETInsert(Int32, String, Int32)指定した文字列の 1 つ以上のコピーをこのインスタンスの指定した文字位置に挿入します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETInsert(Int32, Char[], Int32, Int32)Unicode 文字の指定した部分配列の文字列形式をこのインスタンスの指定した文字位置に挿入します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETRemoveこのインスタンスから、指定した範囲の文字を削除します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETReplace(Char, Char)このインスタンスに出現する指定文字をすべて、別に指定した文字に置換します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETReplace(String, String)このインスタンスに出現するすべての指定した文字列を、別の指定した文字列に置換します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETReplace(Char, Char, Int32, Int32)このインスタンスの部分文字列に出現するすべての指定した文字を、別の指定した文字に置換します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETReplace(String, String, Int32, Int32)このインスタンスの部分文字列に出現するすべての指定した文字列を、別の指定した文字列に置換します。
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETToString()このインスタンスの値を String に変換します。 (Object.ToString() をオーバーライドします。)
パブリック メソッドXNA Framework によるサポート汎用性のあるクラス ライブラリ によるサポートサポート対象: Windows ストア アプリ用 .NETToString(Int32, Int32)このインスタンスの部分文字列の値を String に変換します。
このページのトップへ

  名前説明
明示的なインターフェイス実装プライベート メソッドISerializable.GetObjectDataインフラストラクチャ。 System.Runtime.Serialization.SerializationInfo オブジェクトに、現在の StringBuilder オブジェクトを逆シリアル化するために必要なデータを代入します。
このページのトップへ

このクラスは、可変型の文字のシーケンスである値を持つ、文字列のようなオブジェクトを表します。

このセクションの内容:

文字列と Stringbuilder の型

StringBuilder String が両方とも文字のシーケンスを表しますが、異なる方法で実装されます。 String は 変更できない型です。 つまり、String オブジェクトを変更することで、各操作は実際には新しい文字列を作成します。

valueという名前の文字列変数の値を変更して、たとえば次の C# のコード例の String.Concat のメソッドの呼び出しが表示されます。 実際、Concat メソッドは、メソッドに渡された value オブジェクトと異なる値とアドレスを持つ value オブジェクト。 例に /unsafe のコンパイラ オプションを使用してコンパイルすることに注意してください。


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


広範な文字列操作を実行するルーチンではループの文字列の多くの時間を変更するアプリケーションなど)、文字列を変更すると、繰り返し重要なパフォーマンス低下を強要できます。 変更可能な文字列クラスの代わりに StringBuilderを使用します。 変更可能性はクラスのインスタンスが作成されると、文字を付けるか、削除、置換、または挿入して変更できることを意味します。 StringBuilder オブジェクトは文字列に展開を格納するバッファーを保持します。 新しいデータがバッファーに使用できる領域が付けられます。; それ以外の場合、新しいより大きなバッファーが割り当てられます、元のバッファーからのデータは、新しいバッファーにコピーされ、新しいデータは新しいバッファーに付けられます。

重要 : 重要

StringBuilder クラスは、一般に String クラスよりもパフォーマンスが提供されますが、文字列を処理するたびに StringBuilder と自動的に String を置き換える必要があります。 パフォーマンスは文字列のサイズ、システムでアプリケーションを実行すると、アクションの種類は新しい文字列に割り当てるメモリの量によって異なります。 StringBuilder が実際に重要なパフォーマンスが向上するかどうかを判断するために、アプリケーションをテストできるように準備する必要があります。

String クラスを使用して検討この条件で:

  • アプリケーションで文字列に対する変更の数が少ない場合。 このような場合、StringBuilderString上の小数またはパフォーマンスが向上する場合があります。

  • 連結演算子の数を行うとき、特にリテラル文字列です。 この場合、コンパイラは単一の操作に連結演算子を使用することがあります。

  • 文字列をビルド時に広範囲な検索操作を実行する必要があります。 StringBuilder クラスでも、IndexOf または StartsWithなどのメソッドを検索します。 これらのアクションの String への StringBuilder オブジェクトを変換する必要があります。これは StringBuilderの使用によるパフォーマンスの低下を拒否できます。 詳細については、Stringbuilder オブジェクトのテキストの検索 セクションを参照します。

StringBuilder クラスを使用して検討この条件で:

  • デザイン時に文字列の変更の可変数を行うと、アプリケーションが要求する場合にユーザー入力を含む文字列の乱数を連結するためにループを使用している場合は、(たとえば。

  • 文字列の変更の多くを行うと、アプリケーションが予期している場合。

Stringbuilder のしくみについて

StringBuilder.Length のプロパティは StringBuilder オブジェクトが現在含まれている文字の数を示します。 特定 StringBuilder への文字は、オブジェクトができる文字数を定義します StringBuilder.Capacity のプロパティのサイズと同じになるまで、長さ増加して表示します。 追加された文字数により StringBuilder オブジェクトの期間が現在の容量を超過すると、新しいメモリが割り当てられます Capacity の、プロパティの値が、新しい文字は StringBuilder オブジェクトに追加され、Length のプロパティを調整します。 StringBuilder オブジェクトの追加はメモリの StringBuilder.MaxCapacity プロパティで定義された値に達するまで動的に割り当てられます。 最大容量に達すると、それ以上のメモリは StringBuilder オブジェクトに割り当てることができないため、文字を追加したり、最大値を超えては展開しようとして ArgumentOutOfRangeException または OutOfMemoryException の例外をスローします。

オブジェクトに割り当てられた文字列が拡大されると StringBuilder オブジェクトが新しいメモリを割り当てる記述され、キャパシティを動的に拡張を次の例に示します。 コードは既定の (パラメーターなしの) コンストラクターを呼び出して StringBuilder オブジェクトを作成します。 このオブジェクトの既定の長さが 16 文字にし、最大で 20億文字以上です。 文字列「"これは文です」。文字列長 (19 文字) が StringBuilder オブジェクトの既定の容量を超えているため、新しいメモリ割り当ての結果。 オブジェクトの長さが 32 文字に足されるので、新しい文字列が追加され、オブジェクトの長さが 19 文字になります。 このコードでは、文字列を付けます「This is 追加します」。StringBuilder オブジェクトの値に 11 回。 付け操作により StringBuilder オブジェクトの長さは容量を超過するたびに既存の容量が、Append 操作は成功します。


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


メモリ割り当て

StringBuilder オブジェクトの既定の長さが 16 文字にし、既定の最大で Int32.MaxValueです。 これらの既定値は StringBuilder()StringBuilder(String) のコンストラクターを呼び出す使用されます。

明示的に StringBuilder オブジェクトの初期量を次のように定義する:

  • オブジェクトを作成するときに capacity パラメーターを含むの StringBuilder コンストラクターを呼び出して。

  • StringBuilder の既存のオブジェクトを展開するには、明示的に StringBuilder.Capacity のプロパティに新しい値を割り当てることによって異なります。 新しい地位がプロパティが既存の容量ほど例外が StringBuilder オブジェクトの最大値よりも大きい場合はスローすることに注意してください。

  • 新しい地位の StringBuilder.EnsureCapacity のメソッドを呼び出すことによって異なります。 新しい地位が StringBuilder オブジェクトの最大値より大きい必要があります。 ただし、Capacity のプロパティへの代入とは異なり、EnsureCapacity は目的の新しい地位がの既存の容量ほど例外をスローしません; この場合、メソッドの呼び出しは無効です。

コンストラクターの呼び出し StringBuilder オブジェクトに割り当てられた文字列の長さが既定の容量または指定された領域を超えると、Capacity のプロパティは value パラメーターで指定された文字列の長さが設定されます。

StringBuilder(Int32, Int32) のコンストラクターを呼び出して明示的に StringBuilder オブジェクトの最大値を定義できます。 MaxCapacity のプロパティに新しい値を割り当てることによって最大容量を変更できません読み取り専用です。

前のセクションに示すように、既存の容量が十分でない場合は、追加のメモリを割り当てて、値までの StringBuilder オブジェクトとしての容量は MaxCapacity のプロパティによって定義されます。

通常、既定の容量と最大では、ほとんどのアプリケーションに適しています。 次の状況では、これらの値を設定することを検討する必要があります:

  • StringBuilder オブジェクトの実際のサイズが複数の MB 以上非常に大きく、通常、その後に見込まれる場合。 この場合、値あまり多くのメモリ再割り当ての必要性を削除するに Capacity への最初のプロパティが大幅に設定することでパフォーマンス上の利点があります。

  • アプリケーションが限定されたメモリのシステムで動作します。 この場合、アプリケーションが、メモリが限られている環境で実行してしまう長い文字列を処理すれば、Int32.MaxValue 未満に MaxCapacity のプロパティを設定することを検討する必要があります。

Stringbuilder オブジェクトをインスタンス化する。

次の表に示す 6 個のオーバーロードされたクラス コンストラクターの 1 つを呼び出して StringBuilder オブジェクトをインスタンス化します。 コンストラクターの 3 つが値が空の文字列ですがインスタンス化しましたり、CapacityMaxCapacity 値を個別に設定します StringBuilder オブジェクトを示します。 残り 3 個のコンストラクターは、特定の文字列値や容量がある StringBuilder オブジェクトを定義します。 3 個のコンストラクターの 2 つが、3 番目は最大容量を設定できるようにする場合は Int32.MaxValueの既定の最大値を使用します。

コンストラクター

文字列値

キャパシティ

最大容量

StringBuilder()

String.Empty

16

Int32.MaxValue

StringBuilder(Int32)

String.Empty

capacity パラメーターによって定義されます。

Int32.MaxValue

StringBuilder(Int32, Int32)

String.Empty

capacity パラメーターによって定義されます。

maxCapacity パラメーターによって定義されます。

StringBuilder(String)

value パラメーターによって定義されます。

16 または value より大きい。これらはいずれも、Length

Int32.MaxValue

StringBuilder(String, Int32)

value パラメーターによって定義されます。

capacity パラメーターまたは valueで定義されます。 より大きい。これらはいずれも、Length

Int32.MaxValue

StringBuilder(String, Int32, Int32, Int32)

valueで定義されます。 Substring (startIndex, length)

capacity パラメーターまたは valueで定義されます。 より大きい。これらはいずれも、Length

maxCapacity パラメーターによって定義されます。

次の例では StringBuilder オブジェクトをインスタンス化するためにこれらのコンストラクター オーバーロードの 3 を使用します。


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


Stringbuilder のメソッドを呼び出します。

StringBuilder のインスタンスの代わりに文字列をその同じインスタンスへの参照を変更するメソッドのほとんど。 これは、2 種類の方法で StringBuilder のメソッドを呼び出すことができるようにする:

  • 次の例のように個々のメソッドを呼び出して、戻り値を無視できます。

    
    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.
    
    
    
  • 単一のステートメントで一連のメソッドの呼び出しを作成できます。 これは、後続の操作、単一ステートメントにチェーンを記述するときに便利です。 次の例では、一つのコード行に前の例の 3 種類のメソッドの呼び出しを統合します。

    
    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.
    
    
    

Stringbuilder 操作の実行

、反復処理するには、削除するために追加するに StringBuilder クラスのメソッドを使用すると、StringBuilder の文字を変更するために使用します。

y9sxk6fy.collapse_all(ja-jp,VS.110).gifStringbuilder の文字の繰り返し

StringBuilder.Chars のプロパティを使用して StringBuilder オブジェクトの文字にアクセスできます。 C# では、Chars はインデクサー;です Visual Basic では、これは StringBuilder クラスの既定のプロパティです。 ここでは、明示的に Chars のプロパティを参照せずにそのインデックスだけを使用して個々の文字を設定または取得することができます。 StringBuilder オブジェクトの文字は、インデックス 0 (ゼロ) で始まり、Length - 1.にのインデックスを作成します。

次の例では Chars のプロパティを示します。 これは StringBuilder オブジェクトに 10 の乱数を付け、各文字を繰り返します。 文字の Unicode カテゴリが UnicodeCategory.DecimalDigitNumberの場合、この値が 0 の場合) または数 1 縮小します (9 に変更を数。 例では、別の文字の値が変更された後に StringBuilder オブジェクトの内容を表示します。


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


y9sxk6fy.collapse_all(ja-jp,VS.110).gifStringbuilder オブジェクトにテキストを追加できます。

StringBuilder クラスは StringBuilder オブジェクトのコンテンツを展開するには、次のメソッドが含まれます。:

  • Append のメソッドは、文字列、部分文字列、Char 配列、文字配列の一部を追加、単一文字は、StringBuilder オブジェクトにプリミティブ データ型を複数回 (文字列形式を反復する。

  • AppendLine のメソッドは StringBuilder オブジェクトに行終端記号とともに行終端記号または文字列を追加します。

  • AppendFormat のメソッドは StringBuilder オブジェクトに 複合書式指定文字列 を付けます。 結果文字列に含まれるオブジェクトの文字列形式には、現在のシステム カルチャまたは特定のカルチャの書式指定規則を反映できます。

  • Insert のメソッドは StringBuilder オブジェクトの指定された位置から文字列の文字列、部分文字列、複数の繰り返し、文字配列内の文字配列、部分またはプリミティブ データ型の文字列形式を挿入します。 位置は 0 から始まるインデックスによって定義されます。

次の例では、AppendAppendLineAppendFormatStringBuilder オブジェクトのテキストを展開するには Insert のメソッドを使用します。


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            <


y9sxk6fy.collapse_all(ja-jp,VS.110).gifStringbuilder オブジェクトからテキストを削除できます。

StringBuilder クラスは StringBuilder の現在のインスタンスのサイズを単純化するできるメソッドが含まれています。 Clear のメソッドは、すべての文字を削除し、Length のプロパティをゼロに設定します。 Remove のメソッドは、特定のインデックス位置を開始位置として、指定した数の文字を削除します。 また、である現在のインスタンスの長さよりも小さい値に StringBuilder オブジェクトの末尾から Length のプロパティを設定して、文字を削除できます。

次の例では StringBuilder オブジェクトのテキストの一部を削除し、その容量、最大容量と Length プロパティ値を表示し、StringBuilder オブジェクトからすべての文字を削除するに Clear のメソッドを呼び出します。


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


y9sxk6fy.collapse_all(ja-jp,VS.110).gifStringbuilder オブジェクトのテキストの変更

StringBuilder.Replace のメソッドは StringBuilder のオブジェクトまたは特定の文字範囲の文字または文字列のすべての一致を置き換えます。 次の例では StringBuilder オブジェクトの先頭とすべての感嘆符 (!) ()。置換に Replace のメソッドを使用します。


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?


Stringbuilder オブジェクトのテキストの検索

StringBuilder クラスは String.Containsと、String.IndexOf似たメソッドを使用し、String に用意されている特定の文字または部分文字列をオブジェクトを検索できるようにする String.StartsWith のメソッドは分類します。 部分文字列の位置または開始文字の位置を確認することは、文字列の検索メソッドまたは正規表現のメソッドを使用して String 値を検索する必要があります。 次の表に示すように、このような検索を実装する方法の 4 つがあります。

手法

利点

Cons

StringBuilder オブジェクトに追加する以前の検索文字列値。

部分文字列が存在するかどうかを判断するために役立ちます。

部分文字列のインデックス位置が重要な場合は使用できません。

ToString を呼び出し、String から返されたオブジェクトを検索します。

StringBuilder オブジェクトにすべてのテキストを割り当てた場合、使いやすい、このプロパティを変更した場合。

すべてのテキストが StringBuilder オブジェクトに追加される前に変更をする必要がある場合は面倒に繰り返し ToString を呼び出します。

変更を行う StringBuilder オブジェクトのテキストの末尾から始めることに注意してください。

順次文字の範囲を検索するために Chars のプロパティを使用します。

個々の文字か小さい部分文字列を重視する場合に便利です。

検索する文字数が多い場合、または検索ロジックが複雑な場合に面倒な。

String オブジェクトへの StringBuilder オブジェクトを変換し、String オブジェクトの変更を実行します。

変更の数が小さい場合に便利です。

変更の数が多い場合は StringBuilder クラスのパフォーマンスの低下を拒否します。

これらの手法を詳しくでしょうか。

  • 特定の部分文字列が存在するかどうかの検索対象が部分文字列の位置を確認する場合 (つまり、等しくない場合)、StringBuilder オブジェクトに変更を保存する前に文字列を検索できます。 考えられる実装の 1 つの例を次に示します。 これは、コンストラクターが文字列内で検索する StringBuilder オブジェクトと部分文字列への参照が渡されます StringBuilderFinder クラスを定義します。 この例では、記録された温度を華氏または摂氏判別があると、StringBuilder オブジェクトの先頭に適した序文テキストをかどうか追加します。 乱数ジェネレーターを摂氏温度を華氏温度にデータを含む配列を選択するために使用されます。

    
    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
    
    
    
  • String オブジェクトへの StringBuilder オブジェクトを変換するに StringBuilder.ToString のメソッドを呼び出します。 String.LastIndexOf または String.StartsWithなどのメソッドを使用して文字列を検索したり、正規表現とパターンを検索するために Regex クラスを使用できます。 文字列を格納するために StringBuilderString オブジェクトの両方が UTF-16 エンコーディングを使用するため、文字、部分文字列と正規表現のインデックス位置で両方のオブジェクトが同じです。 これは、テキストが String オブジェクトと同じ位置に変更を加えるときに StringBuilder のメソッドを使用できるようになります。

    メモメモ

    この方法を採用すると、文字列への StringBuilder オブジェクトを繰り返し変換する必要がないように StringBuilder オブジェクトの末尾から先頭にする必要があります。

    このアプローチの例を次に示します。 これは StringBuilder オブジェクトで英語アルファベットの各文字の 4 回以上の出現が格納されます。 これは String オブジェクトとテキストを変換して、各 4 文字シーケンスの開始位置を識別するために、正規表現を使用します。 最後に、最初のシーケンスを除き、4 文字シーケンスの前にアンダースコア () が付加し、大文字にシーケンスの最初の文字を変換します。

    
    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
    
    
    
  • 順次 StringBuilder オブジェクトの文字の範囲を検索するために StringBuilder.Chars のプロパティを使用します。 この方法は検索文字数が多い場合、または検索ロジックが特に複雑な場合実用的ではないことがあります。

    次の例は前の例と同じ機能ですが、実装によって異なります。 これは、その位置にある文字値がいつ変更したかを確認するために Chars のプロパティを挿入し、アンダースコアを大文字に変換して新しいシーケンスの先頭文字を使用します。

    
    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
    
    
    
  • すべての非修飾テキストを StringBuilder オブジェクトに格納し、String オブジェクトへの StringBuilder オブジェクトを変換するに StringBuilder.ToString のメソッドを呼び出し、String オブジェクトの変更を実行します。 いくつかの変更がある場合は、このアプローチを使用して; それ以外の場合は、その文字列を使用すると、StringBuilder オブジェクトを使用して、パフォーマンスの低下を拒否されることがあります。

    次の例は、前の 2 例と機能で同じですが、実装によって異なります。 これは StringBuilder オブジェクト、String オブジェクトへの変換を作成し、文字列の残りのすべての変更を実行するために、正規表現を使用します。 Regex.Replace(String, String, MatchEvaluator) のメソッドは、一致した各文字列の置換の実行にラムダ式を使用します。

    
    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
    
    
    

文字列への Stringbuilder オブジェクトの変換

StringBuilder オブジェクトによって表される文字列を String パラメーターを持つメソッドに渡したり、その文字列をユーザー インターフェイスに表示したりするには、まず、StringBuilder オブジェクトを String オブジェクトに変換する必要があります。 StringBuilder.ToString のメソッドを呼び出して、この変換を実行します。 図の場合、正規表現のメソッドに渡すことができるように、文字列への StringBuilder オブジェクトを変換するに ToString のメソッドを呼び出す前の例を参照してください。

呼び出し時の注意

.NET Framework 4、および .NET Framework 4.5で、StringBuilder(Int32, Int32) のコンストラクターを呼び出して StringBuilder オブジェクトをインスタンス化するとき StringBuilder のインスタンスの長さと長さが両方の MaxCapacity プロパティの値を超えて拡張できます。 これは特に、短い文字列を追加するに AppendAppendFormat のメソッドを呼び出すときに発生します。

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


.NET Framework

サポート対象 : 4.5.2、4.5.1、4.5、4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

サポート対象 : 4、3.5 SP1

汎用性のあるクラス ライブラリ

サポート対象 : 汎用性のあるクラス ライブラリ

Windows ストア アプリ用 .NET

サポート対象 : Windows 8

Windows Phone アプリ用 .NET

サポート対象 : Windows Phone 8、Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (サーバー コア ロールはサポート対象外), Windows Server 2008 R2 (SP1 以降でサーバー コア ロールをサポート。Itanium はサポート対象外)

.NET Framework では、各プラットフォームのすべてのバージョンはサポートしていません。サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。

この型のすべてのパブリック static (Visual Basic では Shared) メンバーは、スレッド セーフです。インスタンス メンバーの場合は、スレッド セーフであるとは限りません。

コミュニティの追加

追加
表示:
© 2015 Microsoft