文字列を「区切り文字」で分割する ― 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 してからあとで整える” 発想は小規模データなら有効。

まとめ

  1. 区切りを表すトークンの型(char, char[], string[])と
  2. オプション(空要素除外・分割数制限)

――この 2 点を覚えれば、Split はたいてい片付きます。配列で返るので、foreach や LINQ で後処理も自在。大量データや複雑なフォーマットでは専用 API を検討しつつ、まずは 「文字列を切る基本ツール」 として頼りにしてください。

訪問数 7 回, 今日の訪問数 7回

C#

Posted by hidepon