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

【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();
    }
  }
}

実行結果:

侍 エンジニア 塾

改行コードで分割

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

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

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

using System;

namespace Sample
{
  class Sample
  {
    static void Main()
    {
      string str = "侍rnエンジニアrn塾";
      string[] del = {"rn"};
      
      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メソッドなどの使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。

文字数で分割

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メソッドの使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。

正規表現で分割

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|piyo hogeまたは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メソッドは区切り文字や文字列で文章を分割することができます。

使いこなすことができるように、この記事を何度も参考にして下さいね!

33歳、未経験だった僕がフリーエンジニアになれた理由

現在フリーでWEBエンジニアをやられている濱口直行さん。33歳で、プログラミングを学び始め、約半年という短い期間で独立までされた学習ログを余すことなくインタビューさせていただきました。

プログラミングを学習中の方はもちろん、独立をお考えの方まで幅広く活用できる記事になっています。この機会に是非活用していただければと思います。

未経験者でも安心の徹底サポート!まずは完全無料の体験レッスン!

「プログラミングに興味があるけど未経験だし、、、」とお悩みの方はご安心ください。

  • 24時間質問し放題
  • あなただけのオーダーメイドカリキュラムで学習の効率化
  • 仕事獲得方法からオリジナルアプリ開発方法

侍エンジニア塾では徹底したサポートによる「オーダーメイドカリキュラム」を作成しています。

まずは無料体験レッスンで、「挫折しない学習方法」や「あなただけの学習ロードマップ」を知り、学習の効率化をしましょう。独学の難点である「オリジナルアプリの作り方やエラーの対処法」についてもアドバイスさせていただきます。

詳しいサービス内容は、下記よりご参照ください。

cta_mtm1

学習者インタビュー

23歳、早稲田中退生が3ヶ月でフリーランスエンジニアになるまで
元ベンチャー役員が起業のためにプログラミングを学んだ本当の理由
売上2,000万のサービスを作った僕がプログラミング学習をした理由
IT音痴のヨガインストラクターが爆速でサイト作成できた秘訣
Rubyを学んだ島根女子流の仕事術「PCとWifiさえあれば仕事はできる」
文系こそなるべき!経験ゼロから3ヶ月でエンジニアに転身した経済学部出身の話

人気記事セレクション

WEBアプリって?ゼロから始める5ステップ
自分にぴったりのプログラミング言語を知る
完全無料!プログラミング学習サイトTop5
プログラミング案件サクッと取れるサイト集
未経験でフリーエンジニアになれる5つの理由
WEBアプリ開発言語を選ぶべき3つの理由
Pythonって何ができるの!?徹底解説!
プログラミング初心者が急成長する10の秘訣
挫折知らず!ドットインストール200%活用術

プログラミング学習者必見

専属講師に質問し放題、レッスンし放題!最短1ヶ月でフリーランスエンジニア
プログラミング学習カリキュラム無料公開中
Ruby学習カリキュラム無料公開中
Python学習カリキュラム無料公開中
 1記事最大11,000円!テックライター募集


Source: 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト

プログラムはじめの一歩カテゴリの最新記事