StringクラスのSplitメソッドの使い方|文字列の分割方法
- プログラマー
- カンマ区切りのCSVファイルをアップロードして、プログラム内部でカンマを使って文字列を分割したいのですが、何か良い方法はありますか?すいません。教えてください!!
- プロジェクト
リーダー - 文字列の分割で思いつくのはSplitメソッドですね。C#でコーディングしているのなら、String.Splitを使ってみてください。
C#のStringクラスのSplitメソッドについて
.NET Framework 2.0から搭載されたString.Splitメソッドは、指定した文字で文字列を分割し、配列に格納してくれるとても便利な命令です。
第1パラメータで指定した文字列配列の要素で対象となる文字列を分割します。以降のサンプルプログラムでは”X”で分割するように指定しています。第2パラメータでは、戻り値に空白の配列要素を含めるかどうかをオプションで指定できます。
「StringSplitOptions.RemoveEmptyEntries」を指定すると空白は含めない、「StringSplitOptions.None」を指定すると、空白を含めることになります。オプションですのでもちろん省略可です。戻り値の配列は文字列で設定されます。
次にサンプルプログラムを見ながら実際の動作を確認していきましょう。
StringクラスのSplitメソッドの基本構文
String.Splitメソッドの基本構文は以下の様になります。
string[] splitted =文字列.Split(separator, nums, options)
separator:区切り文字か区切り文字列
nums:個数指定(任意),
options:オプション(任意)
例えば以下のような文字列があります。
1
2
3
|
string test = "124 X 21 XX 300";
|
これを文字’X’を区切り文字、分割後の文字列で空白を無視するコードは以下になります。
StringSplitOptions.RemoveEmptyEntriesは空白を無視するというオプションです。
1
2
3
4
|
char[] separator = new char[]{'X'};
string[] splitted = test.Split(separator, StringSplitOptions.RemoveEmptyEntries);
|
StringクラスのSplitメソッドの使い方8つ
これよりseparatorに区切り文字や区切り文字列、正規表現などを指定した例と、個数指定を使ったコード例を提示します。
Visual Studio Community 2019でWindows フォームアプリケーション(.Net Framework 4.8)のプロジェクトにて作成しています。
フォーム上にbutton1~button10まで計10個のボタンを張り付けて順に使用しています。
1:文字列で分割する方法
以下に文字列で分割するサンプルを提示します。
string[] splitted =文字列.Split(separator, options)
separator:区切り文字列{ “XX” }を指定します。
options:オプションにStringSplitOptions.Noneを指定します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
private void button1_Click(object sender, EventArgs e)
{
string test = "124 X 241 XX 300 XXX 125";
string[] separator = new string[]{ "XX" };
string[] splitted = test.Split(separator, StringSplitOptions.None);
Console.WriteLine(test);
Console.WriteLine("----------");
foreach (var s in splitted)
{
Console.WriteLine(s);
}
}
|
上のサンプルプログラムを実行すると、以下のように表示されます。
1
2
3
4
5
6
7
|
124 X 241 XX 300 XXX 125
----------
124 X 241
300
X 125
|
2:複数の区切り文字を配列で指定する方法
以下に複数の区切り文字を配列で指定して文字列を分割するサンプルを提示します。
string[] splitted =文字列.Split(separator, options)
separator:複数の区切り文字として配列{ ‘X’, ‘2’ }を指定します。
options:オプションにStringSplitOptions.RemoveEmptyEntriesを指定します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
private void button2_Click(object sender, EventArgs e)
{
string test = "124 X 3241 XX 300 XXX 125";
char[] separator = new char[] { 'X', '2' };
string[] splitted = test.Split(separator, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine(test);
Console.WriteLine("----------");
foreach (var s in splitted)
{
Console.WriteLine(s);
}
}
|
上のサンプルプログラムを実行すると、以下のように表示されます。
1
2
3
4
5
6
7
8
9
10
11
|
124 X 3241 XX 300 XXX 125
----------
1
4
3
41
300
1
5
|
3:カンマで文字列を分割する方法
以下にカンマで文字列を分割するサンプルを提示します。
string[] splitted =文字列.Split(separator, options)
separator:区切り文字に’,’を指定します。
options:オプションにStringSplitOptions.RemoveEmptyEntriesを指定します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
private void button3_Click(object sender, EventArgs e)
{
string test = "124, X, 3241, XX, 300, XXX, 125";
char[] separator = new char[] { ',' };
string[] splitted = test.Split(separator, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine(test);
Console.WriteLine("----------");
foreach (var s in splitted)
{
Console.WriteLine(s);
}
}
|
上のサンプルプログラムを実行すると、以下のように表示されます。
1
2
3
4
5
6
7
8
9
10
11
|
124, X, 3241, XX, 300, XXX, 125
----------
124
X
3241
XX
300
XXX
125
|
4:改行コードで文字列を分割する方法
以下に改行コードで文字列を分割するサンプルを提示します。
string[] splitted =文字列.Split(separator, options)
separator:区切り文字列に”\r\n”を指定します。
options:オプションにStringSplitOptions.RemoveEmptyEntriesを指定します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
private void button4_Click(object sender, EventArgs e)
{
// Windowsでは \r\n OSXやLinux等では \n
string test = "124\r\nX\r\n3241\r\nXX\r\n300\r\nXXX\r\n125";
string test1 = @"124\r\nX\r\n3241\r\nXX\r\n300\r\nXXX\r\n125";
string[] separator = new string[] { "\r\n" };
string[] splitted = test.Split(separator, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine(test1);
Console.WriteLine("----------");
foreach (var s in splitted)
{
Console.WriteLine(s);
}
}
|
上のサンプルプログラムを実行すると、以下のように表示されます。
1
2
3
4
5
6
7
8
9
10
11
|
124\r\nX\r\n3241\r\nXX\r\n300\r\nXXX\r\n125
----------
124
X
3241
XX
300
XXX
125
|
5:スペースで文字列を分割する方法
以下にスペースで文字列を分割するサンプルを提示します。
string[] splitted =文字列.Split(separator, options)
separator:区切り文字に’ ‘を指定します。
options:オプションにStringSplitOptions.RemoveEmptyEntriesを指定します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
private void button5_Click(object sender, EventArgs e)
{
string test = "124 X 3241 XX 300 XXX 125";
char[] separator = new char[] { ' ' };
string[] splitted = test.Split(separator, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine(test);
Console.WriteLine("----------");
foreach (var s in splitted)
{
Console.WriteLine(s);
}
}
|
上のサンプルプログラムを実行すると、以下のように表示されます。
1
2
3
4
5
6
7
8
9
10
11
|
124 X 3241 XX 300 XXX 125
----------
124
X
3241
XX
300
XXX
125
|
6:スラッシュで文字列を分割する方法
以下にスラッシュ(/)で文字列を分割するサンプルを提示します。
string[] splitted =文字列.Split(separator, options)
separator:区切り文字に’/’を指定します。
options:オプションにStringSplitOptions.RemoveEmptyEntriesを指定します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
private void button6_Click(object sender, EventArgs e)
{
string test = "124/X/3241/XX/300/XXX/125";
char[] separator = new char[] { '/' };
string[] splitted = test.Split(separator, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine(test);
Console.WriteLine("----------");
foreach (var s in splitted)
{
Console.WriteLine(s);
}
}
|
上のサンプルプログラムを実行すると、以下のように表示されます。
1
2
3
4
5
6
7
8
9
10
11
|
124/X/3241/XX/300/XXX/125
----------
124
X
3241
XX
300
XXX
125
|
7:文字列または正規表現を指定する方法
以下に正規表現([2|4])で文字列を分割するサンプルを提示します。
string[] splitted =Regex.Split(文字列, pattern)
pattern:区切り文字列に”[2|4]”を指定します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
using System.Text.RegularExpressions;
private void button7_Click(object sender, EventArgs e)
{
string test = "124 X 3241 XX 300 XXX 125";
string pattern= "[2|4]";
string[] splitted = Regex.Split(test, pattern);
Console.WriteLine(test);
Console.WriteLine("----------");
foreach (var s in splitted)
{
Console.WriteLine(s);
}
}
|
上のサンプルプログラムを実行すると、以下のように表示されます。
1
2
3
4
5
6
7
8
9
10
|
124 X 3241 XX 300 XXX 125
----------
1
X 3
1 XX 300 XXX 1
5
|
8:非負の整数で分割する数を制限する方法
以下に非負の整数で文字列を分割するサンプルを提示します。
string[] splitted =文字列.Split(separator, nums)
separator:区切り文字列に’,’を指定します。
nums:個数に非負の整数を指定します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
private void button8_Click(object sender, EventArgs e)
{
string test = "124, X, 3241, XX, 300, XXX, 125";
char[] separator = new char[] { ',' };
// 0は全て表示
string[] splitted = test.Split(separator, 0);
Console.WriteLine(test);
Console.WriteLine("----------");
foreach (var s in splitted)
{
Console.WriteLine(s);
}
// 先頭から4個表示
splitted = test.Split(separator, 4);
Console.WriteLine(test);
Console.WriteLine("----------");
foreach (var s in splitted)
{
Console.WriteLine(s);
}
}
|
上のサンプルプログラムを実行すると、以下のように表示されます。
1
2
3
4
5
6
7
8
9
10
|
124, X, 3241, XX, 300, XXX, 125
----------
124, X, 3241, XX, 300, XXX, 125
----------
124
X
3241
XX, 300, XXX, 125
|
Splitメソッドの応用
拡張メソッドとはstaticなクラスで第一引数にthisキーワードを修飾子に持つstaticなメソッドです。
ここでは以下のような2つの拡張メソッドを作成して、使用する例を提示します。
・文字数を指定して文字列を分割するメソッド
・正規表現を使って分割するメソッド
文字数を指定して文字列を分割する方法
拡張メソッドを使用して、文字列から指定した文字数を取得するSubstringを実装します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public static class MyExtensions
{
/// <summary>
/// 文字数を指定して文字列を分割した文字列を返す
/// </summary>
/// <param name="str">対象文字列</param>
/// <param name="strlen">文字数</param>
/// <returns>分割した文字列</returns>
public static string[] Substring(this String str, int strlen)
{
string[] ret = new string[2];
//
// 開始位置(0)~指定文字数の文字列
//
ret[0] = str.Substring(0, strlen);
//
// 上記の結果の次の文字から最後の文字まで
//
ret[1] = str.Substring(strlen);
return ret;
}
}
|
上記で定義したSubstringの拡張メソッドを使用するサンプルコード以下に提示します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
private void button9_Click(object sender, EventArgs e)
{
string test = "124 X 3241 XX 300 XXX 125";
// 拡張メソッドで実装したSubstringの使用例
string[] splitted = MyExtensions.Substring(test, 13);
Console.WriteLine(test);
Console.WriteLine("----------");
foreach (var s in splitted)
{
Console.WriteLine(s);
}
}
|
上のサンプルプログラムを実行すると、以下のように表示されます。
1
2
3
4
5
6
|
124 X 3241 XX 300 XXX 125
----------
124 X 3241 XX
300 XXX 125
|
正規表現を使って分割する方法
拡張メソッドを使用して、指定された正規表現で文字を分割するコードを実装します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
using System.Text.RegularExpressions;
public static class MyExtensions
{
/// <summary>
/// 正規表現で文字を分割する
/// </summary>
/// <param name="instr">対象文字列</param>
/// <param name="regstr">正規表現文字列</param>
/// <returns>分割した文字列</returns>
public static string[] Matches(this String instr, string regstr)
{
// 正規表現で一致した文字列を取得
MatchCollection matche = Regex.Matches(instr, regstr);
// 戻り値用配列
string[] ret = new string[matche.Count];
int i = 0;
foreach (Match m in matche)
{
ret[i++] = m.Value;
}
return ret;
}
}
|
上記で定義した正規表現の拡張メソッドを使用するサンプルコード以下に提示します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
private void button10_Click(object sender, EventArgs e)
{
string test = "124 X 3241 XX 300 XXX 125";
// 拡張メソッドで実装したMatchesの使用例
string[] splitted = MyExtensions.Matches(test, "[2-4]");
Console.WriteLine(test);
Console.WriteLine("----------");
foreach (var s in splitted)
{
Console.WriteLine(s);
}
}
|
上のサンプルプログラムを実行すると、以下のように表示されます。
1
2
3
4
5
6
7
8
9
10
11
|
124 X 3241 XX 300 XXX 125
----------
2
4
3
2
4
3
2
|
C#でコーディングするSplitメソッドサンプルプログラム
オプション「StringSplitOptions.RemoveEmptyEntries」を指定します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
using System;
using System.Windows.Forms;
namespace WindowsFormsApp24
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string test = "124 X 21 XX 300";
//'X'で分割します
char[] separator = new char[] { 'X' };
//第2パラメータにはオプションで空白文字列は返さない指定を入れときます
string[] splitted = test.Split(separator, StringSplitOptions.RemoveEmptyEntries);
foreach (var s in splitted)
{
Console.WriteLine(s);
}
}
}
}
|
実行画面
ボタンを押下しましょう。上記の分割プログラムが実行されて、コンソールで内容を確認できます。
デバッグで停めて戻り値の配列を確認します。オプションで空白文字を返さない命令を設定しているので、含まれていないことを確認できます。
コンソール確認
オプション「StringSplitOptions.None」を指定します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
using System;
using System.Windows.Forms;
namespace WindowsFormsApp24
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string test = "124 X 21 XX 300";
//'X'で分割します
char[] separator = new char[] { 'X' };
//第2パラメータにはオプションで空白文字列も返す指定を入れます
string[] splitted = test.Split(separator, StringSplitOptions.None);
foreach (var s in splitted)
{
Console.WriteLine(s);
}
}
}
}
|
デバッグで停めて戻り値の配列を確認します。オプションで空白文字を返す命令を設定しているので、空白が含まれていることを確認できます。
コンソール確認
- プログラマー
- String.Splitメソッドを使用すると簡単に文字列の分割ができました。これでコーディングを進めていきます。
- プロジェクト
リーダー - C#で行う文字列分割といえばSplitメソッドです。ファイルアップロードなどではよく利用する命令だと思います。
stringクラスのsplitメソッドでの文字列の分割はよく出てくる!
開発現場では文字列の分割を行う場面は多くあります。C#だけでなく、JavaやPHPを使用して開発を行う場合でも、分割する命令は準備されていますので、ここで利用方法は確実に理解しておくことをおすすめします。
活用方法を知っているととても便利な命令ですので、分割する必要がある場合は、積極的に利用していきましょう。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
C#新着案件New Job
-
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅) -
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)