次の方法で共有


C# で String.Split を使用して文字列を分割する方法

String.Split メソッドは、1 つまたは複数の区切り記号に基づいて入力文字列を分割することで部分文字列の配列を作成します。 このメソッドは、英語のように単語の間にスペースがある文章の場合に、単語の境界で文字列を分割する最も簡単な方法になります。

注意

この記事の C# 例は、Try.NET インライン コード ランナーとプレイグラウンドで実行されます。 [実行] ボタンを選択すると、対話型ウィンドウで例が実行されます。 コードを実行したら、コードを変更し、 [実行] をもう一度選択して変更後のコードを実行できます。 変更後のコードが対話型ウィンドウで実行されるか、コンパイルできなかった場合、対話型ウィンドウにすべての C# コンパイラ エラー メッセージが表示されます。

ヒント

AI アシスタンスを使用して 文字列を分割できます。

文字列を単語に分割する

次のコードは一般的なフレーズを単語ごとの文字列の配列に分割します。

string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');

foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}

区切り文字のインスタンスごとに、返される配列で値が生成されます。 C# の配列はインデックスが 0 から始まるため、配列内の各文字列のインデックスは 0 で始まり、Array.Length プロパティから返された値から 1 を引いた数までになります。

string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');

for (int i = 0; i < words.Length; i++)
{
    Console.WriteLine($"Index {i}: <{words[i]}>");
}

String.Splitには多くのオーバーロードがあります。 これらのオーバーロードは、文字列を分割するための動作をカスタマイズします。

  • 区切り記号は、 char 値または string 値として指定できます。
  • 1 つの区切り記号または複数の区切り記号を指定できます。 複数の区切り記号を指定する場合は、すべて同じ種類 ( char または string) である必要があります。
  • 返される部分文字列の最大数を指定できます。
  • 繰り返し区切り文字を無視するか、戻り値に空の部分文字列を生成するかを指定できます。
  • 返される部分文字列から先頭と末尾の空白を削除するかどうかを指定できます。

残りの例では、これらの各動作を示すために異なるオーバーロードを使用します。

インデックスの詳細については、インデックス と範囲の探索 に関する記事を参照してください。

複数の区切り記号を指定する

String.Split では、複数の区切り文字を使用できます。 次の例ではスペース、コンマ、ピリオド、コロン、タブを区切り文字として使用しています。これらは配列で Split に渡されます。 コードの一番下にあるループは、返される配列の各単語を表示します。

char[] delimiterChars = [' ', ',', '.', ':', '\t'];

string text = "one\ttwo three:four,five six seven";
Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(delimiterChars);
Console.WriteLine($"{words.Length} words in text:");

foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}

区切りの連続するインスタンスにより、出力配列で空の文字列が生成されます。

char[] delimiterChars = [' ', ',', '.', ':', '\t'];

string text = "one\ttwo :,five six seven";
Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(delimiterChars);
Console.WriteLine($"{words.Length} words in text:");

foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}

String.Split は、文字列の配列 (1 つの文字ではなく、対象の文字列を解析するための区切り記号として機能する文字シーケンス) を受け取ることができます。

string[] separatingStrings = ["<<", "..."];

string text = "one<<two......three<four";
Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(separatingStrings, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine($"{words.Length} substrings in text:");

foreach (var word in words)
{
    Console.WriteLine(word);
}

出力サイズを制限する

次の例は、ソース文字列の最初の 4 つの部分文字列に出力を制限する方法を示しています。

string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ', 4, StringSplitOptions.None);

foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}

空の部分文字列を削除する

連続する区切り文字により、返される配列の値として空の文字列が生成されます。 空白文字を区切り記号として使用する次の例では、空の文字列がどのように作成されるかを確認できます。

string phrase = "The quick brown    fox     jumps over the lazy dog.";
string[] words = phrase.Split(' ');

foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}

この動作により、コンマ区切り値 (CSV) ファイルなどの形式で表形式データを簡単に表すことができます。 連続するコンマは空の列を表します。

任意の StringSplitOptions.RemoveEmptyEntries パラメーターを渡し、返される配列で空の文字列を除外できます。 返されるコレクションの処理が複雑な場合、LINQ を使用し、結果のシーケンスを操作できます。

空白をトリミングする

次の例は、エントリのトリミングの効果を示しています。

string numerals = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10";
string[] words = numerals.Split(',', StringSplitOptions.TrimEntries);

Console.WriteLine("Trimmed entries:");
foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}
words = numerals.Split(',', StringSplitOptions.None);
Console.WriteLine("Untrimmed entries:");
foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}

トリムされていないエントリには、数字の前に余分な空白があります。

AI を使用して文字列を分割する

GitHub Copilot などの AI ツールを使用して、C# の String.Split を使用して文字列を分割するコードを生成できます。 要件に従って文字列と区切り記号を使用するようにプロンプトをカスタマイズできます。

次のテキストは、Copilot Chat のプロンプトの例を示しています。

Generate C# code to use Split.String to split a string into substrings.
Input string is "You win some. You lose some." Delimiters are space and period.
Provide example output.

GitHub Copilot では AI を利用しているため、想定外のことや間違いが起こる可能性があります。 詳細については、Copilot の FAQを参照してください。

関連項目