スライドショースライドショー

【C#入門】String.Splitで文字列を分割(複数文字、文字数でも分割)

String.Splitメソッドって使ってますか?

C#ではStringクラスのSplitメソッドを使うと、文字列を指定の区切り文字で分割し配列に格納することができます。

この記事では、Splitメソッドについて

  • String.Splitメソッドとは
  • Splitメソッドの使い方
  • 複数の文字で分割
  • リストに格納する
  • 文字数で分割
  • 正規表現で分割

など基本的な内容から、応用的な内容についても解説していきます。

今回はSplitメソッドについて、使い方をわかりやすく解説します!

String.Splitメソッドとは

String.SplitメソッドとはStringクラスメソッドの一つで、文字列を指定した区切り文字で分割し配列に格納する場合に使います

区切り文字以外にも、文字列でも分割することができます。また、区切り文字や文字列は配列で指定することで複数指定することができます。

オプションとしてStringSplitOptions.RemoveEmptyEntriesを指定すると、分割され格納される配列の要素が空の場合は省略することができます。

Splitメソッドはいろいろな区切り文字、文字列で分割することが多いので、それぞれの場合について詳しくみていきましょう。

Splitメソッドの使い方

ここでは一つの区切り文字、文字列で分割する場合についてみていきます。

スペースで分割

文字列中に含まれるスペースで文字列を分割する方法についてみていきましょう。

using System;

namespace Sample
{
  class Sample
  {
    static void Main()
    {
      string str = "侍 エンジニア 塾";
      
      string[] arr =  str.Split(' ');
      Console.WriteLine("{0}", string.Join(", ", arr));
      
      Console.ReadKey();
    }
  }
}

実行結果:

侍, エンジニア, 塾

カンマで分割

次は文字列中に含まれる「,」(カンマ)で文字列を分割する場合です。

using System;

namespace Sample
{
  class Sample
  {
    static void Main()
    {
      string str = "侍,エンジニア,塾";
      
      string[] arr =  str.Split(',');
      Console.WriteLine("{0}", string.Join(" ", arr));
      
      Console.ReadKey();
    }
  }
}

実行結果:

侍 エンジニア 塾

改行コードで分割

文字列中に含まれる改行コード「\r\n」で文字列を分割する場合も確認しておきましょう。

C#の場合改行コードは「\r\n」2文字で表します。

文字列で分割する場合は、その文字列を格納した配列とStringSplitOptionsを引数に指定する必要があります。

using System;

namespace Sample
{
  class Sample
  {
    static void Main()
    {
      string str = "侍\r\nエンジニア\r\n塾";
      string[] del = {"\r\n"};
      
      string[] arr =  str.Split(del, StringSplitOptions.None);
      Console.WriteLine("{0}", string.Join(", ", arr));
      
      Console.ReadKey();
    }
  }
}

実行結果:

侍, エンジニア, 塾

文字列で分割

それでは、文字列で分割する方法についても確認しましょう。

using System;

namespace Sample
{
  class Sample
  {
    static void Main()
    {
      string str = "侍エンジニア塾";
      string[] del = {"エンジニア"};
      
      string[] arr =  str.Split(del, StringSplitOptions.None);
      Console.WriteLine("{0}", string.Join(", ", arr));
      
      Console.ReadKey();
    }
  }
}

実行結果:

侍, 塾

複数の文字で分割

Splitメソッドは複数の区切り文字を配列で指定することができます。

それでは「(」、「)」という2つの文字で分割してみましょう。

using System;

namespace Sample
{
  class Sample
  {
    static void Main()
    {
      string str = "侍(エンジニア)塾";
      char[] del = {'(', ')'};
      
      string[] arr =  str.Split(del);
      Console.WriteLine("{0}", string.Join(", ", arr));
      
      Console.ReadKey();
    }
  }
}

実行結果:

侍, エンジニア, 塾

リストに格納する

Splitメソッドの戻り値は配列ですので、リストに格納するには型の変換が必要です。

リスト型オブジェクトからAddRangeメソッドを使って、配列を空のリストに追加します。

using System;
using System.Collections.Generic;

namespace Sample
{
  class Sample
  {
    static void Main()
    {
      string str = "侍,エンジニア,塾";
      
      string[] arr =  str.Split(',');
      
      var list = new List<string>();
      list.AddRange(arr);
      Console.WriteLine("{0}", string.Join(" ", list));
      
      Console.ReadKey();
    }
  }
}

実行結果:

侍 エンジニア 塾

AddRangeメソッドなどの使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。

【C#入門】Add、RemoveでListの要素を追加、削除する方法
更新日 : 2019年5月22日

文字数で分割

Splitメソッドは文字数を指定して文字列を分割することはできません

文字数を指定して文字列を分割するには、独自のメソッドを作る必要があります。

拡張メソッドを作って、Splitメソッドと同じように呼び出せるようにしてみましょう。

using System;
using System.Collections.Generic;

namespace Sample
{
  // 拡張クラス
  static class Sample
  {
    static void Main()
    {
      string str = "侍エンジニア塾";
      
      string[] arr =  str.MySplit(3);
      Console.WriteLine("{0}", string.Join(", ", arr));
      
      Console.ReadKey();
    }
    
    // 拡張メソッド
    static string[] MySplit(this string str, int count) {
      var list = new List<string>();
      int length = (int)Math.Ceiling((double)str.Length / count);
      
      for(int i = 0; i < length; i++) {
        int start = count * i;
        if(str.Length <= start) {
          break;
        }
        if(str.Length < start + count) {
          list.Add(str.Substring(start));
        } else {
          list.Add(str.Substring(start, count));
        }
      }
      
      return list.ToArray();
    }
  }
}

実行結果:

侍エン, ジニア, 塾

Substringメソッドの使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。

【C#入門】String.Substringで文字列の指定部分を抜き出す方法
更新日 : 2019年4月19日

正規表現で分割

StringクラスのSplitメソッドでは正規表現を使って分割することはできません

正規表現とはいくつかの文字列を一つの形式でまとめて表現するための表現方法のことです。主な正規表現については下記のとおりになります。

記号記号の説明例の説明
.任意の1文字。改行文字は除く。.+任意の文字列
*直前の1文字の0回以上の繰り返しと一致hoge*hogeもしくはhogee...と一致
^行の先頭^[0-9]行頭が数字
$行の末尾^.{10}$10文字の行
[ ]カッコ内の任意の1文字と一致。「-」で範囲指定可。[a-z]小文字のアルファベット1文字と一致
[^ ]カッコ内の任意の1文字と不一致。「-」で範囲指定可。[^A-Z]大文字のアルファベット以外
+直前の文字の1個以上の繰り返しと一致hoge+hogee...と一致
?直前の文字の0または1文字と一致hoge?eと一致
{ }カッコ内の数値の繰り返しと一致{n}直前の文字のn個の繰り返しと一致
{,n}直前の文字のn個以下の繰り返しと一致
{m,}直前の文字のm個以上の繰り返しと一致
{m,n}直前の文字のm個以上、n個以下の繰り返しと一致
|直前、直後どちらかのパターンに一致hoge|piyohogeまたはpiyo
( )カッコ内をグループ化。マッチした内容は参照可。

正規表現を使って分割するには、System.Text.RegularExpressions.RegexクラスのSplitメソッドを使う必要があります。

using System;
using System.Text.RegularExpressions;

namespace Sample
{
  class Sample
  {
    static void Main()
    {
      string str = "〒100-0005 東京都千代田区丸の内1丁目";
      
      string pattern = "[〒 都道府県市区町村]";
      string[] arr =  Regex.Split(str, pattern);
      
      Console.WriteLine("{0}", string.Join(", ", arr));
      
      Console.ReadKey();
    }
  }
}

実行結果:

, 100-0005, 東京, 千代田, 丸の内1丁目

まとめ

ここでは、Splitメソッドについて説明しました。

Splitメソッドは区切り文字や文字列で文章を分割することができます。使いこなすことができるように、この記事を何度も参考にして下さいね!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説