VB.NETVB の Left, Mid, Right のように文字列を取り出す

スポンサーリンク

VB6 以前では、文字列の一部を取り出すために、Left, Mid, Right (Left$, Mid$, Right$) などの関数を使用していました。VB.NET 以降では、System.String クラスの Substring メソッドを使用することは、文字列の一部を取り出す でも紹介しました。

System.String クラスの Substring メソッドを使用せずとも、Microsoft.VisualBasic 名前空間には、VB6 と同じように Left, Mid, Right などの関数が用意されています。ただ、Microsoft.VisualBasic 名前空間の配下を使いたくない、VB 訛りのコーディングをしたくないという理由で使われなくなっています。

しかし、VB に慣れている方が、Substring を扱うと取り出し開始位置が Mid 関数と違うために混乱するようです。Substring メソッドの開始位置は 0 からの要素指定ですが、Mid 関数 は 1 からの文字位置指定です。

また、文字列の長さを超えた位置を選択した場合の対処が、考慮されていないことがあるみたいです。Left, Mid, Right 関数は、文字列の長さを越えた位置を選択しても例外は発生しませんが、Substring メソッドは例外が発生します。

素直に、Left, Mid, Right 関数を使うことができれば、こんなことは気にしなくても良いわけです。Microsoft.VisualBasic 名前空間の配下は使えないのであれば、Substring メソッドから自作すれば良いのです。

※本来は Substring メソッドを使うべきだとは思います。

サンプルコード

以下にサンプルコードを示します。

VB.NET 全般
Option Strict On

''' -----------------------------------------------------------------------------
''' <summary>
'''     Microsoft.VisualBasic.Strings をカバーした静的クラスです。
''' <summary>
''' -----------------------------------------------------------------------------

Public Class VBStrings

  #Region " Left メソッド "

    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     文字列の左端から指定された文字数分の文字列を返します。</summary>
    ''' <param name="stTarget">
    '''     取り出す元になる文字列。</param>
    ''' <param name="iLength">
    '''     取り出す文字数。</param>
    ''' <returns>
    '''     左端から指定された文字数分の文字列。
    '''     文字数を超えた場合は、文字列全体が返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Function Left(ByVal stTarget As String, ByVal iLength As Integer) As String
        If iLength <= stTarget.Length Then
            Return stTarget.Substring(0, iLength)
        End If

        Return stTarget
    End Function

  #End Region

  #Region " Mid メソッド (+1) "

    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     文字列の指定された位置以降のすべての文字列を返します。</summary>
    ''' <param name="stTarget">
    '''     取り出す元になる文字列。</param>
    ''' <param name="iStart">
    '''     取り出しを開始する位置。</param>
    ''' <returns>
    '''     指定された位置以降のすべての文字列。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Overloads Function Mid(ByVal stTarget As String, ByVal iStart As Integer) As String
        If iStart <= stTarget.Length Then
            Return stTarget.Substring(iStart - 1)
        End If

        Return String.Empty
    End Function

    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     文字列の指定された位置から、指定された文字数分の文字列を返します。</summary>
    ''' <param name="stTarget">
    '''     取り出す元になる文字列。</param>
    ''' <param name="iStart">
    '''     取り出しを開始する位置。</param>
    ''' <param name="iLength">
    '''     取り出す文字数。</param>
    ''' <returns>
    '''     指定された位置から指定された文字数分の文字列。
    '''     文字数を超えた場合は、指定された位置からすべての文字列が返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Overloads Function Mid(ByVal stTarget As String, ByVal iStart As Integer, ByVal iLength As Integer) As String
        If iStart <= stTarget.Length Then
            If iStart + iLength - 1 <= stTarget.Length Then
                Return stTarget.Substring(iStart - 1, iLength)
            End If

            Return stTarget.Substring(iStart - 1)
        End If

        Return String.Empty
    End Function

  #End Region

  #Region " Right メソッド "

    ''' -----------------------------------------------------------------------------------
    ''' <summary>
    '''     文字列の右端から指定された文字数分の文字列を返します。</summary>
    ''' <param name="stTarget">
    '''     取り出す元になる文字列。</param>
    ''' <param name="iLength">
    '''     取り出す文字数。</param>
    ''' <returns>
    '''     右端から指定された文字数分の文字列。
    '''     文字数を超えた場合は、文字列全体が返されます。</returns>
    ''' -----------------------------------------------------------------------------------
    Public Shared Function Right(ByVal stTarget As String, ByVal iLength As Integer) As String
        If iLength <= stTarget.Length Then
            Return stTarget.Substring(stTarget.Length - iLength)
        End If

        Return stTarget
    End Function

  #End Region

End Class

使用例は以下のようになります。

VB.NET 全般
    ' 必要な変数を宣言する
    Dim stTarget As String = "ABCDEF"

    ' 左端から 4 文字の文字列を取得する
    MessageBox.Show(VBStrings.Left(stTarget, 4))         'ABCD

    ' 左端から 2 文字目以降のすべての文字列を取得する
    MessageBox.Show(VBStrings.Mid(stTarget, 2))          'BCDEF

    ' 左端から 2 文字目から 3 文字の文字列を取得する
    MessageBox.Show(VBStrings.Mid(stTarget, 2, 3))       'BCD

    ' 右端から 4 文字の文字列を取得する
    MessageBox.Show(VBStrings.Right(stTarget, 4))        'CDEF

関連するリファレンス

準備中です。

スポンサーリンク