文字列を「区切り文字」で分割する ― string.Split の基礎と活用ポイント
Split は 1 本の文字列(string)を複数の部分文字列に分解 し、配列(string[])として返すメソッドです。配列・ループだけで文字列の“ばらし”処理を書いていたころを思い出すと、そのありがたみがよくわかります。
目次
1. 最もシンプルな使い方
string sentence = "Unity,C#,Dotween";
string[] words = sentence.Split(','); // char を 1 つ渡す
// → ["Unity", "C#", "Dotween"]
- 戻り値: string[]
- 引数: char(区切り文字)
- 文字を 1 つ書くだけなので簡潔。
- 複数の区切り文字を使いたい場合は 配列 を渡す(後述)。
2. 複数の区切り文字を指定
string text = "Apple;Orange,Peach";
string[] fruits = text.Split(new[] { ',', ';' });
// → ["Apple", "Orange", "Peach"]
- char だけでなく char[] も指定可。
- それぞれの区切り文字が同列扱いになる。
3. 文字列で区切る(トークンが複数文字の場合)
string log = "2025-07-23 | INFO | Game Started";
string[] parts = log.Split(new[] { " | " }, StringSplitOptions.None);
// → ["2025-07-23", "INFO", "Game Started"]
- string[] を渡すことで「複数文字のトークン」で切り分けられる。
- .NET 6 以降なら Split(" | “) の短縮形も使える(ReadOnlySpan<char> オーバーロード)。
4. 空要素を除外する ― StringSplitOptions.RemoveEmptyEntries
string csv = "A,,B,,C";
string[] data = csv.Split(',', StringSplitOptions.RemoveEmptyEntries);
// → ["A", "B", "C"]
- 連続区切りで生まれる 空文字列(””)を捨てる。
- 後から Where(s => s != “") と書くより読みやすい。
5. 最大分割数を指定する
string line = "id,name,email,comment";
string[] cols = line.Split(',', 3); // ← 最大 3 要素
// → ["id", "name", "email,comment"]
- 第 2 引数に count を渡すと、「残り全部」を最後の要素にまとめる。
- ログの“メッセージ部”だけまとめたいときに便利。
6. 覚えておきたい落とし穴
現象 | 原因・対策 |
---|---|
改行で区切りたいのに \r が残る | \r\n の両方を渡す、または Split(Environment.NewLine) で文字列版を使う |
正規表現のような柔軟な区切りが欲しい | Regex.Split を使う |
高速に大量データをさばきたい | .AsSpan() と Span<T>.Split(.NET 8)や PipeReader を検討 |
7. 総合サンプル:CSV 1 行を安全にパース
string line = "\"Konishi, Hideaki\",58,\"C# & Unity\"";
string[] fields = line
.Split(',') // まずカンマでざっくり分割
.Select(s => s.Trim('"')) // 両端の " を削除
.ToArray();
/* 結果
["Konishi, Hideaki", "58", "C# & Unity"]
*/
ポイント
- CSV の完全対応は TextFieldParser やサードパーティーライブラリ(CsvHelper)が安全。
- それでも “まず Split してからあとで整える” 発想は小規模データなら有効。
まとめ
- 区切りを表すトークンの型(char, char[], string[])と
- オプション(空要素除外・分割数制限)
――この 2 点を覚えれば、Split はたいてい片付きます。配列で返るので、foreach や LINQ で後処理も自在。大量データや複雑なフォーマットでは専用 API を検討しつつ、まずは 「文字列を切る基本ツール」 として頼りにしてください。
訪問数 7 回, 今日の訪問数 7回
ディスカッション
コメント一覧
まだ、コメントがありません