C# string.Splitの使い方

この記事のポイント

C#のstring.Splitメソッドは、指定した区切り文字で文字列を分割し、配列として取得するためのメソッドです。

この記事を読むと、次のようなことが身に付きます。

  • 指定した区切り文字で文字列を分割する方法がわかる
  • 複数の区切り文字やオプションを指定した文字列の分割ができるようになる
  • CSV形式のデータやURLを解析する実践的な方法がわかる

この記事を通して、string.Splitメソッドの正しい使い方をマスターすれば、複雑な文字列も効率的に処理できるプログラムが書けるようになります。

目次

string.Splitとは?

string.Splitメソッドは、ひとつの文字列を、指定した「区切り文字」で分割し、複数の文字列に分けるための機能です。

例えば、買い物リストに「リンゴ,ミカン,バナナ」とカンマ区切りで書かれているとします。string.Splitメソッドは、カンマの部分でハサミを入れて、「リンゴ」「ミカン」「バナナ」と書かれた3つの部分に切り分けるようなイメージです。

切り分けられた個々の文字列は、配列でまとめて扱えます。

string.Splitメソッドの特徴

  • 指定した区切り文字をもとに、文字列を分割する
  • 分割された結果は、文字列の配列(string[])として得られる
  • カンマやスペース、ハイフンなど、さまざまな文字を区切り文字に指定できる
  • 複数の異なる区切り文字を同時に指定することも可能
  • 分割時に空になった要素を取り除くなど、便利なオプション機能がある

CSVファイルやURLの解析など、決まった形式のデータをプログラムで扱う際に欠かせない、基本的な機能です。

【関連】
C#をもっと詳しく学ぶならpaizaラーニング

基本構文

string.Splitメソッドの最も基本的な使い方は、単一の文字を区切り文字として指定する方法です。メソッドの戻り値は文字列配列(string[])となり、元の文字列が指定した区切り文字で分割された結果が格納されます。

using System; namespace SampleApp { public class SampleProgram { public static void Main(string[] args) { string text = "イヌ,ネコ,ウサギ"; string[] animals = text.Split(','); int index = 0; foreach (string animal in animals) { Console.WriteLine($"animals[{index}]: \"{animal}\""); index++; } } } }

出力結果

animals[0]: "イヌ"
animals[1]: "ネコ"
animals[2]: "ウサギ"

この例では、変数textに入っている文字列「イヌ,ネコ,ウサギ」を、Splitメソッドを使ってカンマ(,)で分割しています。分割された結果は、animalsという配列に格納されます。その後、foreachループ処理で配列の要素をひとつずつ取り出し、コンソールに出力しています。

複数の区切り文字を同時に指定することも可能です。この場合、char配列を使用して区切り文字を定義します。

using System; namespace SampleApp { public class SampleProgram { public static void Main(string[] args) { string data = "クマ;トラ,パンダ"; char[] separators = { ',', ';' }; string[] animalList = data.Split(separators); foreach (string animal in animalList) { Console.WriteLine($"動物名: {animal}"); } } } }

出力結果

動物名: クマ
動物名: トラ
動物名: パンダ

この例では、文字列dataを「;」と「,」の2種類の区切り文字で分割しています。区切り文字をchar型配列separatorsにまとめてSplitメソッドに渡すことで、複数の区切り文字に対応できます。結果として「クマ」「トラ」「パンダ」が順に出力されます。

実用例

ここからは、string.Splitメソッドの実際の使用場面を想定した具体的なサンプルコードを紹介します。各例では、実務でよく遭遇するシナリオを基に、効果的な活用方法を学んでいきます。

カンマ区切り文字列の分割

CSVファイルの処理でよく使われる、カンマで区切られた文字列を分割する基本的な例です。データベースから取得したデータや外部ファイルの内容を処理する際に頻繁に使用されます。

using System; namespace SampleApp { public class SampleProgram { public static void Main(string[] args) { string csvData = "ライオン,ゾウ,キリン,シマウマ"; string[] animalList = csvData.Split(','); foreach (string animal in animalList) { Console.WriteLine($"動物名: {animal}"); } } } }

出力結果

動物名: ライオン
動物名: ゾウ
動物名: キリン
動物名: シマウマ

この例では、csvDataという変数に入った文字列をカンマ(,)で分割しています。実際に分割された個々の動物名がanimalList配列に格納され、foreachループで順番に出力されます。

複数の区切り文字を使った分割

異なる区切り文字が混在するデータを処理する場合の例です。実際のデータ処理では、複数の形式が混在することがよくあります。

using System; namespace SampleApp { public class SampleProgram { public static void Main(string[] args) { string mixedData = "サル;ゴリラ,チンパンジー;オランウータン"; char[] delimiters = { ',', ';' }; string[] primates = mixedData.Split(delimiters); Console.WriteLine($"霊長類の種類数: {primates.Length}"); foreach (string primate in primates) { Console.WriteLine(primate); } } } }

出力結果

霊長類の種類数: 4
サル
ゴリラ
チンパンジー
オランウータン

この例では、カンマ(,)とセミコロン(;)をchar配列delimitersにまとめ、Splitメソッドで文字列を分割しています。そのため複数の区切り文字が混在していても正しく分割でき、4種類の霊長類が順に出力されます。

空の要素を除外した分割

連続する区切り文字や文字列の最初・最後にある区切り文字によって生じる空の要素を除外する方法です。StringSplitOptions.RemoveEmptyEntriesオプションを使用します。

using System; namespace SampleApp { public class SampleProgram { public static void Main(string[] args) { string data = ",イルカ,,クジラ,"; string[] seaAnimals = data.Split(',', StringSplitOptions.RemoveEmptyEntries); foreach (string animal in seaAnimals) { Console.WriteLine($"海の動物: {animal}"); } } } }

出力結果

海の動物: イルカ
海の動物: クジラ

この例では、先頭や連続した区切り文字によって発生する空要素を除外しています。Splitメソッドの第2引数にStringSplitOptions.RemoveEmptyEntriesを指定することで、空の要素を自動的に無視し、「イルカ」と「クジラ」だけを取得できます。

文字配列を使った分割

複数の文字を区切り文字として指定し、より柔軟な分割処理を行う例です。様々な形式のテキストデータに対応できます。

using System; namespace SampleApp { public class SampleProgram { public static void Main(string[] args) { string birdData = "ハト スズメ\tカラス\nワシ"; char[] separators = { ' ', '\t', '\n' }; string[] birds = birdData.Split(separators, StringSplitOptions.RemoveEmptyEntries); Console.WriteLine("鳥類リスト:"); foreach (string bird in birds) { Console.WriteLine(bird); } } } }

出力結果

鳥類リスト:
ハト
スズメ
カラス
ワシ

この例では、半角スペース、タブ、改行を区切り文字としてchar配列に指定しています。SplitメソッドにStringSplitOptions.RemoveEmptyEntriesを併用することで、空要素を除外し、意味のある単語だけを整ったリストとして出力します。

StringSplitOptionsを使った高度な分割

分割時の動作を細かく制御するためのオプションを活用した例です。分割数の制限と空要素の除外を同時に行います。

using System; namespace SampleApp { public class SampleProgram { public static void Main(string[] args) { string animalList = "ウマ-ウシ-ブタ-ヒツジ-ヤギ"; string[] livestock = animalList.Split('-', 3, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < livestock.Length; i++) { Console.WriteLine($"家畜[{i}]: {livestock[i]}"); } } } }

出力結果

家畜[0]: ウマ
家畜[1]: ウシ
家畜[2]: ブタ-ヒツジ-ヤギ

この例では、Splitメソッドに区切り文字「-」と分割数3を指定しています。そのため最初の2つの区切り位置で分割が行われ、3つ目の要素には残りの文字列「ブタ-ヒツジ-ヤギ」がそのまま格納されます。

ファイルパスの分割処理

ファイルパスを構成要素に分解する実用的な例です。システム開発でファイル操作を行う際によく使用されるテクニックです。

using System; namespace SampleApp { public class SampleProgram { public static void Main(string[] args) { string filePath = @"C:\Animals\Mammals\ライオン.txt"; string[] pathParts = filePath.Split( new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries ); Console.WriteLine($"ファイル名: {pathParts[pathParts.Length - 1]}"); Console.WriteLine($"フォルダ数: {pathParts.Length - 1}"); for (int i = 0; i < pathParts.Length - 1; i++) { Console.WriteLine(pathParts[i]); } } } }

出力結果

ファイル名: ライオン.txt
フォルダ数: 3
C:
Animals
Mammals

この例では、filePathを「\」で分割し、パスをフォルダ名とファイル名に分解しています。\はエスケープ文字のため、文字として扱うには\\と2つ続けて記述します。最後の要素がファイル名、それ以前がフォルダ名として取得されます。

日付形式の文字列分割

日付データを年・月・日に分解して処理する例です。データベースから取得した日付文字列を解析する際に使用します。

using System; namespace SampleApp { public class SampleProgram { public static void Main(string[] args) { string dateString = "2024/03/15-トラの誕生日"; string[] dateParts = dateString.Split('/'); string[] dayAndEvent = dateParts[2].Split('-'); Console.WriteLine($"年: {dateParts[0]}"); Console.WriteLine($"月: {dateParts[1]}"); Console.WriteLine($"日: {dayAndEvent[0]}"); Console.WriteLine($"イベント: {dayAndEvent[1]}"); } } }

出力結果

年: 2024
月: 03
日: 15
イベント: トラの誕生日

この例では、文字列を「/」で分割して年・月・日+イベントを取得し、さらに日付部分を「-」で分けて日とイベント名を抽出しています。複数の区切り文字を組み合わせることで、複雑な日付データも柔軟に処理できます。

動物名リストの処理

複雑な形式の動物データを処理し、カテゴリ別に分類する実用的な例です。データの整理や検索機能の実装に活用できます。

using System; namespace SampleApp { public class SampleProgram { public static void Main(string[] args) { string zooData = "肉食:ライオン,トラ|草食:ゾウ,キリン"; string[] categories = zooData.Split('|'); foreach (string category in categories) { string[] typeAndAnimals = category.Split(':'); Console.WriteLine($"分類: {typeAndAnimals[0]}"); Console.WriteLine($"動物: {typeAndAnimals[1]}"); } } } }

出力結果

分類: 肉食
動物: ライオン,トラ
分類: 草食
動物: ゾウ,キリン

この例では、zooDataを「|」で区切って分類ごとに分け、さらに「:」で分類名と動物リストを抽出しています。foreachで順に処理することで、肉食・草食などのカテゴリごとに整理して出力できます。

まとめ

C#のstring.Splitメソッドは、文字列を指定した区切り文字で分割する、文字列処理において欠かせない機能です。この記事では、基本的な使い方から応用的な活用例まで解説しました。

string.Splitメソッドが活躍する場面は次のようなケースです。

string.Splitが活躍する場面

  • CSVファイルやテキストデータを読み込んで処理するとき
  • ユーザーが入力したデータを解析、検証するとき
  • ファイルパスやURLを要素ごとに分解するとき

string.Splitメソッドを使う上で、押さえておきたいポイントを覚えておきましょう。

重要なポイント

  • 区切り文字の指定方法によって、分割の結果が変わる
  • StringSplitOptionsを使うと、空の要素を取り除ける
  • 複数の区切り文字を一度に指定して分割できる
  • 分割する回数を指定することも可能

初めてC#を学ぶ方も、この記事で紹介したstring.Splitメソッドを実際に書いて、基本的な使い方を試してみてください。

決まった形式の文字列を分割して処理するコードは、実際の開発でも頻繁に登場します。ぜひstring.Splitメソッドをマスターして、より複雑で実用的なプログラムを作成できるようになりましょう。

レベルを更に上げたい方はpaizaプログラミングスキルチェックへ

  1. paizaラーニングトップ
  2. リファレンス
  3. C#のリファレンス記事一覧
  4. C# string.Splitの使い方