忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

文字列の分解に付いて(String.Split)

文字列の分解は、文字列オブジェクトのメソッド Split を用いて行います。 一般的な例として日付を分解する方法を見てみます。

    '文字列の分解の例(年月日を例とする)
    Dim strTest As String = "2019/08/01"
    '"/"(スラッシュ)で分解する
    Dim arr As String() = strTest.Split("/")
    '3個の配列で「arr」には入る
    For i As Integer = 0 To UBound(arr)
        Console.WriteLine("arr({0}) : {1}", i, arr(i))
    Next

動作結果として、デバッグ時の出力ウインドウには以下の様に表示されます。 日付文字列が「/」(スラッシュ)で分解されることが分かります。 但し、注意する点は、配列要素には指標が「0」から順に格納されることです。
上の例では、文字列配列「arr」が何個返されるか分からないので、 UBound 関数を使って最後の指標の値を指定しています。

arr(0) : 2019
arr(1) : 08
arr(2) : 01

さらに、以下の例を見て下さい。

    '文字列の分解の例(年月日を例とする:スラッシュは無い)
    strTest = "20190801"
    '"/"(スラッシュ)で分解する
    arr = strTest.Split("/")
    '1個の配列で「arr」には入るはず
    For i As Integer = 0 To UBound(arr)
        Console.WriteLine("arr({0}) : {1}", i, arr(i))
    Next

実行結果は以下の通りです。

arr(0) : 20190801

分解する文字列にはスラッシュは無いので、元の文字列が要素が1個の配列の先頭に返されます。

これは少し、問題が有りまして、例えば分解すべき文字列がテキストボックスか何かで入力する場合、 スラッシュで分解された配列が3個だと固定で考えて組んでしまうと、エラーが発生するはずです。 それが、以下の様な例です。

    '文字列を「TextBox1」から取るとする
    Dim strTest As String = Me.TextBox1.Text
    '"/"(スラッシュ)で分解する
    Dim arr As String() = strTest.Split("/")
    '3個の配列で「arr」には入る
    Dim strYMD As String = arr(0) + arr(1) + arr(2)
    Console.WriteLine("日付 : {0}", strYMD)

「TextBox1」に「2019/08/01」等のスラッシュがあるデータが入力されればいいのですが、 「20190801」と入力すると、日付の連結のところでエラーが発生します。

このエラーを回避するには、分解された文字列配列の個数をチェックする方法があります。
または、テキストボックスでは無く必ず日付文字列が返されるであろう日付型コントロールを使うのも一つです。

Split には同じ名前で別の引数を持つメソッドがあります。 以下の例は、分解文字を配列で与えるメソッドです。 「/」(スラッシュ)「 」(スペース)「:」(コロン)を文字配列で与えることで、年月日時刻を一括で分解することが出来ます。

    '文字列の分解の例(年月日を例とする)
    Dim strTest As String = "2019/08/01 13:15:47"
    '"/"(スラッシュ)で分解する
    Dim arrSplit As Char() = {"/"c, " "c, ":"c}
    Dim arr As String() = strTest.Split(arrSplit)
    '3個の配列で「arr」には入る
    For i As Integer = 0 To UBound(arr)
        Console.WriteLine("arr({0}) : {1}", i, arr(i))
    Next

実行結果は以下の通りです。

arr(0) : 2019
arr(1) : 08
arr(2) : 01
arr(3) : 13
arr(4) : 15
arr(5) : 47

関連する記事

文字列の連結をStringBuilderで高速に行う(StringBuilder)
文字列定数(改行、タブ、バックスペース等)について
文字列変換関数(StrConv)で変換が途中で切れる
文字列変換関数(StrConv)の使い方











PR

コメント

コメントを書く