文字列.Split() / string.Join()
文字列を区切り文字で分割して配列にする『Split()』と、配列の要素を区切り文字で結合して文字列にする『string.Join()』メソッドです。
構文
// 指定した区切り文字で分割し、文字列配列を返します。 文字列.Split(char separator) 文字列.Split(string separator) 文字列.Split(char[] separators) // 配列の要素を区切り文字で結合した文字列を返します。 string.Join(string separator, IEnumerable<string> values) string.Join(string separator, string[] values)
メソッド一覧
| メソッド | 概要 |
|---|---|
| Split(char separator) | 指定した1文字を区切りに分割し、string[] を返します。 |
| Split(string separator) | 指定した文字列を区切りに分割し、string[] を返します。 |
| Split(char[] separators) | 複数の区切り文字のいずれかで分割します。 |
| string.Join(string separator, ...) | 配列やリストの要素を separator でつないだ文字列を返します。インスタンスメソッドではなく静的メソッドです。 |
サンプルコード
Program.cs
using System;
// Split() でカンマ区切りの文字列を分割する
string csvRow = "item_a,100,type_x,category_1,option_2";
string[] fields = csvRow.Split(',');
foreach (string field in fields) {
Console.WriteLine(field);
}
dotnet run item_a 100 type_x category_1 option_2
string.Join() で結合する
配列やリストの要素を区切り文字でつなげる場合は string.Join() を使います。
JoinSample.cs
using System;
// string.Join() で配列を結合する
string[] languages = { "C#", "Java", "Python" };
string joined = string.Join(" / ", languages);
Console.WriteLine(joined); // C# / Java / Python
// Split() してから加工して Join() するパターン
string tagString = "csharp,dotnet,programming";
string[] tags = tagString.Split(',');
string result = string.Join(" | ", tags);
Console.WriteLine(result); // csharp | dotnet | programming
// 文字列を区切り文字に使う
string sentence = "item_a・item_b・item_c";
string[] members = sentence.Split("・");
Console.WriteLine(members[0]); // item_a
Console.WriteLine(members.Length); // 3
dotnet run C# / Java / Python csharp | dotnet | programming item_a 3
複数の区切り文字 / 空要素の除外
char[] を渡すと複数の区切り文字のいずれかで分割できます。StringSplitOptions.RemoveEmptyEntries で空要素を除外できます。
MultiSeparator.cs
using System;
// 複数の区切り文字で分割する
string text = "apple;banana,cherry|grape";
string[] items = text.Split(new char[] { ';', ',', '|' });
Console.WriteLine(string.Join(", ", items)); // apple, banana, cherry, grape
// 連続した区切り文字が含まれる場合
string csv = "a,,b,,c";
string[] withEmpty = csv.Split(',');
Console.WriteLine(withEmpty.Length); // 5(空要素を含む)
string[] noEmpty = csv.Split(',', StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine(noEmpty.Length); // 3(空要素を除外)
Console.WriteLine(string.Join(", ", noEmpty)); // a, b, c
dotnet run apple, banana, cherry, grape 5 3 a, b, c
よくあるミス
よくあるミス: 区切り文字が連続しているとき空要素が含まれる
区切り文字が連続していたり、文字列の先頭・末尾に区切り文字がある場合、Split() は空の要素を含む配列を返します。意図しない空要素が含まれないように StringSplitOptions.RemoveEmptyEntries を使ってください。
using System;
// NG: 区切り文字が連続していると空要素が含まれる
string csv = ",apple,,banana,";
string[] result = csv.Split(',');
Console.WriteLine(result.Length); // 5(空要素が3つ含まれる)
foreach (string s in result) {
Console.WriteLine($"[{s}]");
}
dotnet run 5 [] [apple] [] [banana] []
修正後は次の通りです。
using System;
// OK: RemoveEmptyEntries で空要素を除外する
string csv = ",apple,,banana,";
string[] result = csv.Split(',', StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine(result.Length); // 2
foreach (string s in result) {
Console.WriteLine($"[{s}]");
}
dotnet run 2 [apple] [banana]
概要
『Split()』はインスタンスメソッド(文字列に対して呼び出す)ですが、『string.Join()』は静的メソッド(クラス名 string に対して呼び出す)です。この点に注意してください。
区切り文字が連続している場合(例: "a,,b")、空の要素も配列に含まれます。空要素を除外したい場合は Split(',', StringSplitOptions.RemoveEmptyEntries) を使用してください。
文字列の埋め込みと整形には『PadLeft() / PadRight()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。