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行目は、末尾が区切り文字のカンマで終わっています。
この場合、区切り文字の後は空文字の要素になります。
関連の記事