C# Split 文字列を分割して配列にする

C#の文字列を分割して配列にするサンプルです。

目次

サンプル splitとは(文字列を分割して配列にする)
  カンマで区切る / 半角スペースで区切る / タブで区切る / 改行で区切る
  ドットで区切る / 正規表現で区切り文字をORで指定
  末尾が区切り文字の時、最後は要素になる?

splitとは(文字列を分割して配列にする)

  • 文字列が引数(文字列 or 正規表現)にマッチすると、そこで文字列を区切ります。
  • StringクラスのSplitメソッドは文字列で区切ります。
  • RegexクラスのSplitメソッドは正規表現を使えます。
  • 戻り値はstringの配列です。
  • 以下はMicrosoftのSplitメソッドのリンクです。
    https://docs.microsoft.com/ja-jp/dotnet/csharp/how-to/parse-strings-using-split

カンマで区切る

using System;
class Test1
{
	static void Main()
	{
		var color1 = "赤,黄,青";
		var arr1 = color1.Split(',');

		foreach (string s in arr1)
		{
			Console.WriteLine(s);// 赤 黄 青
		}
		Console.WriteLine(arr1.Length); // 3
	}
}

7行目は、文字列をカンマで区切って配列にしています。

半角スペースで区切る

using System;
class Test1
{
	static void Main()
	{
		var color1 = "赤 黄 青";
		var arr1 = color1.Split(' ');

		foreach (string s in arr1)
		{
			Console.WriteLine(s);// 赤 黄 青
		}
		Console.WriteLine(arr1.Length); // 3
	}
}

7行目は、文字列を半角スペースで区切って配列にしています。

タブで区切る

using System;
using System.Text.RegularExpressions;

class Test1
{
	static void Main()
	{
		var str1 = "赤	黄	青";
		var arr1 = Regex.Split(str1, "\t");

		foreach (string s in arr1)
		{
			Console.WriteLine(s);// 赤 黄 青
		}
		Console.WriteLine(arr1.Length); // 3
	}
}

正規表現でタブを指定しています。(バックスラッシュ(円記号)+t)

改行で区切る

using System;
using System.Text.RegularExpressions;

class Test1
{
	static void Main()
	{
		var str1 = "赤と黄\r\n青と緑\n白と黒";
		var arr1 = Regex.Split(str1, "\r\n|\n");

		Console.WriteLine(arr1[0]);//赤と黄
		Console.WriteLine(arr1[1]);//青と緑
		Console.WriteLine(arr1[2]);//白と黒
		Console.WriteLine(arr1.Length); // 3
	}
}

\r\nは復帰改行(CRLF)、\nは改行(LF)です。パイプ(|)は正規表現でorを意味します。

ドットで区切る

using System;
using System.Text.RegularExpressions;

class Test1
{
	static void Main()
	{
		var str1 = "test.txt";
		var arr1 = Regex.Split(str1, "\\.");

		Console.WriteLine(arr1[0]);//test
		Console.WriteLine(arr1[1]);//txt
		Console.WriteLine(arr1.Length); // 2
	}
}

正規表現のドットではなく、文字としてのドットを表すため\でエスケープを行います。

正規表現で区切り文字をORで指定

using System;
using System.Text.RegularExpressions;

class Test1
{
	static void Main()
	{
		var str1 = "1:a,2:b,3:c";
		var arr1 = Regex.Split(str1, "[,:]");

		foreach (string s in arr1)
		{
			Console.WriteLine(s);// 1 a 2 b 3 c
		}
		Console.WriteLine(arr1.Length); // 6
	}
}

9行目の[,:]は、カンマ(,)またはコロン(:)という正規表現です。

末尾が区切り文字の時、最後は要素になる?

using System;

class Test1
{
	static void Main()
	{
		var str1 = "a,b,c,";
		var arr1 = str1.Split(',');

		Console.WriteLine(arr1.Length);//4

		foreach (string s in arr1)
		{
			Console.WriteLine(s);//「a」「b」「c」「」
		}
	}
}

7行目は、末尾が区切り文字のカンマで終わっています。
この場合、区切り文字の後は空文字の要素になります。

関連の記事

C# IndexOf 文字列の位置を取得する
C# Substring 文字列を切り出す

△上に戻る