VB.NET Split 文字列を分割して配列にする

VB.NETのSplitメソッドで文字列を分割して配列にするサンプルです。

目次

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

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

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

カンマで区切る

Module Module1
	Sub Main()
		Dim str1 As String = "赤,黄,青"

		Dim arr1() As String = str1.Split(",")
		'Dim arr1() As String = str1.Split(","c)

		For Each c In arr1
			Console.WriteLine(c) '赤 黄 青
		Next
		Console.WriteLine(arr1.Length) '3
	End Sub
End Module

5行目は、Splitメソッドでカンマ区切りにして配列にしています。
6行目のダブルコーテーションの後のcは、カンマがChar型であることを示します。
結果は5行目と同じになります。

半角スペースで区切る

Module Module1
	Sub Main()
		Dim str1 As String = "赤 黄 青"

		Dim arr1() As String = str1.Split(" ")

		For Each c In arr1
			Console.WriteLine(c) '赤 黄 青
		Next
		Console.WriteLine(arr1.Length) '3
	End Sub
End Module

5行目は、半角のスペースを指定して配列にしています。

タブで区切る

Module Module1
	Sub Main()
		Dim str1 As String = "赤	黄	青"

		Dim arr1() As String = str1.Split(vbTab)

		For Each c In arr1
			Console.WriteLine(c) '赤 黄 青
		Next
		Console.WriteLine(arr1.Length) '3
	End Sub
End Module

5行目は、定数のvbTabを指定して配列にしています。

スラッシュで区切る

Module Module1
	Sub Main()
		Dim str1 As String = "2020/05/21"

		Dim arr1() As String = str1.Split("/"c)

		For Each d In arr1
			Console.WriteLine(d) '2020 05 21
		Next
		Console.WriteLine(arr1.Length) '3
	End Sub
End Module

5行目は、スラッシュで分割します。
cは、対象の文字がChar型であることを示しています。

改行で区切る

Imports System.Text.RegularExpressions
Module Module1
	Sub Main()
		Dim str1 As String = "赤と黄
青と緑
白と黒"
		Dim arr1() As String = Regex.Split(str1, "\r\n|\n")
		Console.WriteLine(arr1(0)) '赤と黄
		Console.WriteLine(arr1(1)) '青と緑
		Console.WriteLine(arr1(2)) '白と黒
		Console.WriteLine(arr1.Length) '3
	End Sub
End Module

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

ドットで区切る

Imports System.Text.RegularExpressions
Module Module1
	Sub Main()
		Dim str1 As String = "test.txt"
		Dim arr1() As String = Regex.Split(str1, "\.")
		Console.WriteLine(arr1(0)) 'test
		Console.WriteLine(arr1(1)) 'txt
		Console.WriteLine(arr1.Length) '2
	End Sub
End Module

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

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

Imports System.Text.RegularExpressions
Module Module1
	Sub Main()
		Dim str1 As String = "file001-1.txt"

		Dim arr1() As String = Regex.Split(str1, "[-.]")
		'Dim arr1() As String = str1.Split(New [Char]() {"-"c, "."c})

		For Each d In arr1
			Console.WriteLine(d) 'file001 1 txt
		Next
		Console.WriteLine(arr1.Length) '3
	End Sub
End Module

6行目の[,:]は、ハイフン(-)またはピリオド(.)という正規表現です。
7行目は、StringクラスのSplitメソッドを使用した場合です。cは、前の項目がChar型であることを示しています。
正規表現のほうがわかりやすいです。

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

Module Module1
	Sub Main()
		Dim str1 As String = "a,b,c,"

		Dim arr1() As String = str1.Split(","c)

		For Each c In arr1
			Console.WriteLine(c) '「a」「b」「c」「」
		Next
		Console.WriteLine(arr1.Length) '4
	End Sub
End Module

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

関連の記事

VB.NET 文字列を操作するサンプル
VB.NET 文字列の位置を取得(IndexOf/LastIndexOf)

△上に戻る