ヒント
この記事は、少なくとも 1 つのプログラミング言語を既に知っており、C# を学習している開発者向けの 基礎 セクションの一部です。 プログラミングを初めて使用する場合は、最初に「 はじめ に」チュートリアルから始めてください。
他の言語を使っていますか?string.Split は、Java の String.split や JavaScript の String.prototype.split に相当する C# の機能です。 これらの言語とは異なり、C# はリストではなく配列 (string[]) を返し、区切り記号引数は正規表現ではなく文字または文字列です。 パターンベースの分割については、 Regex.Splitを参照してください。
String.Split メソッドは、1 つ以上の区切り記号を使用して文字列を部分文字列の配列に分割します。 単語、CSV スタイルの値、プロトコル トークンなどの区切りテキストを解析する最も簡単な方法です。
このメソッドには多くのオーバーロードがありますが、4 つの独立した決定が含まれます。
-
区切り記号: 1 つの
char、charの配列、1 つのstring、またはstringの配列。 - 最大結果数: 返される部分文字列の数を上限とします。
- 空のエントリの処理: 空の部分文字列 (既定値) を保持するか、 StringSplitOptions.RemoveEmptyEntriesで削除します。
- 空白処理: 各エントリの先頭と末尾の空白を StringSplitOptions.TrimEntriesでトリミングします。
文字列を単語に分割する
空白文字で語句を分割するには、区切り記号として ' ' を渡します。
string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');
foreach (var word in words)
{
Console.WriteLine($"<{word}>");
}
// => <The>
// => <quick>
// => <brown>
// => <fox>
// => <jumps>
// => <over>
// => <the>
// => <lazy>
// => <dog.>
返された配列を for で反復処理して、各単語の位置を回復します。
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]}>");
}
// => Index 0: <The>
// => Index 1: <quick>
// => Index 2: <brown>
// => ...
入力に区切り文字の繰り返しインスタンスが含まれている場合、 Split は連続する区切り記号間の "ギャップ" ごとに 1 つずつ、空のエントリを生成します。
string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');
foreach (var word in words)
{
Console.WriteLine($"<{word}>");
}
// The runs of spaces produce empty entries:
// => <The>
// => <quick>
// => <brown>
// => <>
// => <>
// => <>
// => <fox>
// => ...
この記事の後半で示すように、 StringSplitOptions.RemoveEmptyEntries を渡して空のエントリを削除します。
複数の区切り文字で分割する
複数の文字が区切り文字として機能できる場合は、それらを配列として渡します。 次の例では、スペース、コンマ、ピリオド、コロン、タブをすべて単語の境界として扱います。
char[] delimiters = [' ', ',', '.', ':', '\t'];
string text = "one\ttwo three:four,five six seven";
Console.WriteLine($"Original text: '{text}'");
string[] words = text.Split(delimiters);
Console.WriteLine($"{words.Length} words in text:");
foreach (var word in words)
{
Console.WriteLine($"<{word}>");
}
// => 7 words in text:
// => <one>
// => <two>
// => <three>
// => <four>
// => <five>
// => <six>
// => <seven>
隣接する区切り記号では、空のエントリが生成されます。
char[] delimiters = [' ', ',', '.', ':', '\t'];
string text = "one\ttwo :,five six seven";
Console.WriteLine($"Original text: '{text}'");
string[] words = text.Split(delimiters);
Console.WriteLine($"{words.Length} words in text:");
foreach (var word in words)
{
Console.WriteLine($"<{word}>");
}
// => 7 words in text:
// => <one>
// => <two>
// => <>
// => <>
// => <five>
// => <six>
// => <seven>
マルチ文字区切り記号で分割する
単語全体または複数文字の区切り記号で分割するには、文字列の配列を渡します。 文字列配列のオーバーロードには、 StringSplitOptions 値が必要です。 繰り返し区切り記号を使用すると空の結果が生成される場合は、 RemoveEmptyEntries を使用します。
string[] separators = ["<<", "..."];
string text = "one<<two......three<four";
Console.WriteLine($"Original text: '{text}'");
string[] words = text.Split(separators, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine($"{words.Length} substrings in text:");
foreach (var word in words)
{
Console.WriteLine(word);
}
// => 3 substrings in text:
// => one
// => two
// => three<four
返される部分文字列の数を制限する
結果の数を上限にするには、 count 引数を渡します。 最後のエントリには、残りの区切り記号を含め、残っているすべてのものが保持されます。
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}>");
}
// => <The>
// => <quick>
// => <brown>
// => <fox jumps over the lazy dog.>
このパターンは、最初の区切り記号のみが意味のある key=value ペアやその他の形式に便利です。
各エントリから空白をトリミングする
StringSplitOptions.TrimEntries は、返されるすべての部分文字列の先頭と末尾の空白を除去します。 これを RemoveEmptyEntries と組み合わせて、一般的な CSV スタイルのクリーンアップを行うことができます。
string numerals = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10";
string[] trimmed = numerals.Split(',', StringSplitOptions.TrimEntries);
Console.WriteLine("Trimmed entries:");
foreach (var word in trimmed)
{
Console.WriteLine($"<{word}>");
}
string[] untrimmed = numerals.Split(',', StringSplitOptions.None);
Console.WriteLine("Untrimmed entries:");
foreach (var word in untrimmed)
{
Console.WriteLine($"<{word}>");
}
// => Trimmed entries: <1> <2> ... <10>
// => Untrimmed entries: <1> < 2> ... < 10>
[正規表現を使用する]
Split は、固定文字または文字列区切り記号に適しています。 パターンベースの分割には、 Regex.Splitを使用します。 文字列の正規表現の概要については、「 文字列操作」を参照してください。
こちらも参照ください
.NET