エクスポート (0) 印刷
すべて展開
この記事は機械翻訳されたものです。 記事の文章にポインターを重ねると、原文のテキストが表示されます。 詳細情報
訳文
原文

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

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

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

[ComVisibleAttribute(false)]
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 の場合または文字が含まれていなかった場合、区切り記号に空白文字が指定されたものとして実行されます。 空白文字は Unicode 規格によって定義され、Char.IsWhiteSpace メソッドに渡された場合は、true を返します。 ただし、このメソッド オーバーロードの呼び出しの 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 の各要素は、1 つ以上の文字で構成された区切り記号を定義します。 options パラメーターが Noneで、2 つの区切り記号が隣接している場合、または、区切り記号がこのインスタンスの先頭か末尾に見つかった場合、対応する配列の要素には Empty が格納されます。

区切り記号の配列

separator 要素のいずれかが一つを超える文字で構成されている場合は、その要素の最初の文字だけが考慮される区切り記号とそれに続く文字は無視されます。 たとえば、separator の要素の 1 つが「10 "である場合は、文字列「This10is10a10string 分割します」。次の 4 個の要素の配列を返します。: {「this」、「0is」、「0a」、「0string」。}.

比較の詳細

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

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

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

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 つだけ作成して各メソッド呼び出しで参照することを検討してください。 こうすることで、各メソッド呼び出しのオーバーヘッドを大幅に低減できます。

呼び出し時の注意

.NET Framework 3.5 以前のバージョンでは、null であるか、または文字が含まれていない separatorSplit メソッドに渡された場合、このメソッドは Trim メソッドが文字列をトリムするために使用したものとは少し異なる文字セットを使用して文字列を分割します。 .NET Framework 4 では、両方のメソッドがまったく同じ Unicode 空白文字セットを使用します。

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


using System;

class Example 
{
   public static void Main() 
   {
      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.
      Console.WriteLine("Splitting the string:\n   \"{0}\".", source);
      Console.WriteLine();
      Console.WriteLine("Using the delimiter string:\n   \"{0}\"", 
                        stringSeparators[0]);
      Console.WriteLine();                           

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

      // Split delimited by another string and return all non-empty elements.
      result = source.Split(stringSeparators, 
                            StringSplitOptions.RemoveEmptyEntries);
      Console.WriteLine("Result including non-empty elements ({0} elements):", 
                        result.Length);
      Console.Write("   ");
      foreach (string s in result)
      {
         Console.Write("'{0}' ", String.IsNullOrEmpty(s) ? "<>" : s);                   
      }
      Console.WriteLine();
   }
}
// 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'


次の例では、区切り記号、および空白文字を含む区切り記号の配列を定義します。 この配列に文字列から個々の単語で構成される配列を Split(String[], StringSplitOptions) メソッドの戻り値に StringSplitOptions.RemoveEmptyEntries の値と一緒に渡します。


using System;

public class Example
{
   public static void Main()
   {
      string[] separators = {",", ".", "!", "?", ";", ":", " "};
      string value = "The handsome, energetic, young dog was playing with his smaller, more lethargic litter mate.";
      string[] words = value.Split(separators, StringSplitOptions.RemoveEmptyEntries);
      foreach (var word in words)
         Console.WriteLine(word);
   }
}
// The example displays the following output:
//       The
//       handsome
//       energetic
//       young
//       dog
//       was
//       playing
//       with
//       his
//       smaller
//       more
//       lethargic
//       litter
//       mate


メソッドが StringSplitOptions.RemoveEmptyEntriesに設定されている options の引数ということに注意してください。 これは、返された配列が区切り記号と空白文字の空の部分文字列の一致を表す String.Empty 値を含むことができません。

.NET Framework

サポート対象 : 4.5.2、4.5.1、4.5、4、3.5、3.0、2.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 システム要件」を参照してください。

コミュニティの追加

追加
表示:
© 2014 Microsoft