情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

String.Split メソッド (String[], StringSplitOptions)

2013/12/12

指定された文字列の配列の要素で区切られた、この文字列の部分文字列を格納する文字列配列を返します。空の配列要素を返すかどうかをパラメーターで指定します。

Namespace:  System
アセンブリ:  mscorlib (mscorlib.dll 内)

public string[] Split(
	string[] separator,
	StringSplitOptions options
)

パラメーター

separator
型: System.String []
この文字列での部分文字列の区切り文字である文字列の配列、区切り文字が含まれない空の配列、または null
options
型: System.StringSplitOptions
返される配列に空の要素を含めるかどうかを示すフラグ。返される配列で空の配列要素を省略する場合は RemoveEmptyEntries を指定します。返される配列で空の配列要素を含める場合は None を指定します。

戻り値

型: System.String []
この文字列を、separator 配列のいずれかまたは複数の要素 (文字列) で区切ることによって取り出された部分文字列を格納する配列。詳細については、「解説」を参照してください。

例外条件
ArgumentException

optionsStringSplitOptions 列挙体のメンバーではありません。

戻り値に関する情報

返される配列要素に区切り記号文字列は含まれません。

このインスタンスに、separator に指定されたいずれの文字列も含まれていない場合、返される配列には、そのインスタンス自体を保持する要素が 1 つだけ格納されます。separator パラメーターが null の場合または文字が含まれていなかった場合、区切り記号に空白文字が指定されたものとして実行されます。Split メソッドで空白として解釈される文字の一覧については、String.Split(Char[]) メソッドの「解説」の表を参照してください (この一覧は、Trim() メソッドで認識される空白文字の一覧とは少し異なることに注意してください)。ただし、このメソッド オーバーロードの呼び出しの separator パラメーターが null の場合、コンパイラのオーバーロード解決は失敗します。呼び出されたメソッドを明確に識別するには、コードが null 型を指定する必要があります。このオーバーロードを明確に識別するいくつかの方法を次の例に示します。


string phrase = "The quick  brown fox";
string[] words;

words = phrase.Split(default(string[]), StringSplitOptions.RemoveEmptyEntries);

words = phrase.Split((string[])null, StringSplitOptions.RemoveEmptyEntries);

words = phrase.Split(null as string[], StringSplitOptions.RemoveEmptyEntries);


options パラメーターが RemoveEmptyEntries で、このインスタンスの長さがゼロの場合、空の配列が返されます。

separator の各要素は、区切り文字列を定義します。options パラメーターが None で、2 つの区切り記号が隣接している場合、または、区切り記号がこのインスタンスの先頭か末尾に見つかった場合、対応する配列の要素には Empty が格納されます。

比較に関する情報

Split(String[], StringSplitOptions) メソッドは、この文字列を、separator パラメーターで指定された 1 つまたは複数の文字列で区切ることによって部分文字列を抽出し、これらの部分文字列を配列の要素として返します。

Split メソッドが区切り記号を検索する際の比較処理では、大文字と小文字は区別され、序数の並べ替え規則が使用されます。単語、文字列、序数の並べ替えの詳細については、System.Globalization.CompareOptions 列挙値のトピックを参照してください。

Split(String[], StringSplitOptions) メソッドでは、値が null または空の文字列 ("") である separator の要素は無視されます。

separator に格納された複数の文字列に共通の文字が使用されていた場合にあいまいな結果が生じるのを防ぐため、Split の処理では、対象のインスタンスの値を先頭から最後まで解析し、separator 内の要素と最初に一致した要素を区切り文字として使用します。インスタンスにおける部分文字列の出現順が、separator における要素の格納順よりも優先されます。

たとえば、値が "abcdef" であるインスタンスがあるとします。separator の 1 つ目の要素が "ef"、2 つ目の要素が "bcde" であった場合、分割処理の結果は "a" と "f" になります。インスタンス内の部分文字列 "bcde" が、部分文字列 "f" よりも先に separator 内の要素と一致するためです。

ただし、separator の 1 つ目の要素が "bcd" で、2 つ目の要素が "bc" であった場合、分割処理の結果は "a" と "ef" になります。これは、"bcd" が、separator に格納された要素のうち、インスタンス内の区切り記号と一致する最初の要素であるためです。separator に格納された要素の順序が逆だった場合、つまり、1 つ目の要素が "bc" で、2 つ目の要素が "bcd" であった場合、分割処理の結果は "a" と "def" となります。

パフォーマンスに関する考慮事項

Split メソッドでは、返される配列オブジェクト用と、各配列要素の String オブジェクト用にメモリが確保されます。アプリケーション開発においてパフォーマンスの最適化が必要とされる場合、または、アプリケーション開発においてメモリ割り当ての管理がきわめて重要な要件となる場合は、IndexOf メソッドまたは IndexOfAny メソッドと、(必要に応じて) Compare メソッドを使用して文字列から部分文字列を検索します。

区切り記号文字の位置で文字列を分割する場合は、IndexOf メソッドまたは IndexOfAny メソッドを使用して、文字列中の区切り記号文字を検索します。区切り記号文字列の位置で文字列を分割する場合は、IndexOf メソッドまたは IndexOfAny メソッドを使用して、区切り記号文字列の最初の文字を検索します。次に、Compare メソッドを使用して、最初の文字に続く文字が区切り記号文字列の残りの文字に等しいかどうかを判断します。

また、複数の Split メソッド呼び出しで同じ文字セットが文字列の分割に使用される場合は、配列を 1 つだけ作成して各メソッド呼び出しで参照することを検討してください。こうすることで、各メソッド呼び出しのオーバーヘッドを大幅に低減できます。

次の例では、文字列の String.Split(String[], StringSplitOptions) メソッドを呼び出すときに options パラメーターを StringSplitOptions.None にした場合と StringSplitOptions.RemoveEmptyEntries にした場合での、返される配列の違いを示します。


using System;

class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      string source = "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]";
      string[] stringSeparators = new string[] { "[stop]" };
      string[] result;

      // Display the original string and delimiter string.
      outputBlock.Text += String.Format("Splitting the string:\n   \"{0}\".", source) + "\n";
      outputBlock.Text += "\n";
      outputBlock.Text += String.Format("Using the delimiter string:\n   \"{0}\"",
                        stringSeparators[0]) + "\n";
      outputBlock.Text += "\n";

      // Split a string delimited by another string and return all elements.
      result = source.Split(stringSeparators, StringSplitOptions.None);
      outputBlock.Text += String.Format("Result including all elements ({0} elements):",
                        result.Length) + "\n";
      outputBlock.Text += "   ";
      foreach (string s in result)
      {
         outputBlock.Text += String.Format("'{0}' ", String.IsNullOrEmpty(s) ? "<>" : s);
      }
      outputBlock.Text += "\n";
      outputBlock.Text += "\n";

      // Split delimited by another string and return all non-empty elements.
      result = source.Split(stringSeparators,
                            StringSplitOptions.RemoveEmptyEntries);
      outputBlock.Text += String.Format("Result including non-empty elements ({0} elements):",
                        result.Length) + "\n";
      outputBlock.Text += "   ";
      foreach (string s in result)
      {
         outputBlock.Text += String.Format("'{0}' ", String.IsNullOrEmpty(s) ? "<>" : s);
      }
      outputBlock.Text += "\n";
   }
}
// The example displays the following output:
//    Splitting the string:
//       "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]".
//    
//    Using the delimiter string:
//       "[stop]"
//    
//    Result including all elements (9 elements):
//       '<>' 'ONE' '<>' 'TWO' '<>' '<>' 'THREE' '<>' '<>'
//    
//    Result including non-empty elements (3 elements):
//       'ONE' 'TWO' 'THREE'


Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示: