社畜ゲートウェイ

京成・京急を中心に取り上げる阪急ファンのブログです。

【スポンサーリンク】

【VB.NET】文字列が空文字か確認する方法

【スポンサーリンク】

f:id:neko_britannia:20200515220156j:plain

文字列が空文字かどうかを確認する方法です。比較演算子を使用する方法が一般的ですが、文字列の長さやIsNullOrEmptyメソッドを使用してチェックする方法もあります。

文字列が空文字かチェックする

文字列が空文字かどうかをチェックするにはいくつか方法があります。代表的なものは、

  • 「""」「String.Empty」と比較する
  • 文字列の長さが0
  • String.IsNullOrEmptyメソッド

の3つです。基本的にはこの3つを使用して、文字列が空文字かをチェックしています。色んなソースで使用されているので、見かけることは多々あると思います。

解説例としてテキストボックスとボタンだけを配置したフォームを用意しました。実行ボタンを押下すれば、テキストボックスの値が空文字か確認する処理を実行する簡単なフォームです。

f:id:neko_britannia:20200527220610j:plain

 

「""」「String.Empty」と比較する

比較演算子を用いて「""」やString.Emptyと比較する方法です。「=」(イコール)で比較する方法はよく見かける方法です。Equalsメソッドを使用しているソースコードも見かけられますが、意味は一緒です。

Private Sub cmdBlankCheck_Click(sender As Object, e As EventArgs) Handles cmdBlankCheck.Click
    Dim strCheck As String
    Try
        strCheck = txtInput.Text

        '「""」
        If strCheck = "" Then
            MessageBox.Show(strCheck, """", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Else
            MessageBox.Show(strCheck, """", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If

        'String.Empty
        If strCheck = String.Empty Then
            MessageBox.Show(strCheck, "String.Empty", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Else
            MessageBox.Show(strCheck, "String.Empty", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If

        'Equals("")
        If strCheck.Equals("") Then
            MessageBox.Show(strCheck, "Equals("""")", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Else
            MessageBox.Show(strCheck, "Equals("""")", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If

        'Equals(string.Empty)
        If strCheck.Equals(String.Empty) Then
            MessageBox.Show(strCheck, "String.Empty", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Else
            MessageBox.Show(strCheck, "String.Empty", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If

    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub

この様に4種類くらいはパッと見かけられますが、全て同じ実行結果、つまり空文字の判定なので、見かけても「同じやつだな」という認識を持って下さい。空文字チェックだけではなく、文字列比較の方法としても上記の4種類いずれかが採用されています。

 

文字列の長さが0

文字列の長さが0の場合も空文字と同じです。文字列変数に1文字でも入っていたら、文字列の長さが1以上になります。

Private Sub cmdBlankCheck_Click(sender As Object, e As EventArgs) Handles cmdBlankCheck.Click
    Dim strCheck As String
    Try
        strCheck = txtInput.Text

        'Length
        If strCheck.Length = 0 Then
            MessageBox.Show(strCheck, "Length", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Else
            MessageBox.Show(strCheck, "Length", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If

        'Len
        If Len(strCheck) = 0 Then
            MessageBox.Show(strCheck, "Len", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Else
            MessageBox.Show(strCheck, "Len", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If

    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub

文字列の長さを判定する方法は2種類で、Lengthプロパティを参照して文字列の長さを確認する方法が多いです。

また、上記ソースコードに記載していますが、Len関数を使用して文字列の長さを確認する方法もあります。VB6からマイグレーションされたソースコードでよく見かけます。

 

String.IsNullOrEmptyメソッド

StringクラスのIsNullOrEmptyメソッドを使用して、空文字か確認する方法もあります。IsNullOrEmptyメソッドは文字列変数がNothingか空文字の場合に戻り値としてTrueを返してくれます。

Private Sub cmdBlankCheck_Click(sender As Object, e As EventArgs) Handles cmdBlankCheck.Click
    Dim strCheck As String
    Try
        strCheck = txtInput.Text

        'IsNullOrEmpty
        If String.IsNullOrEmpty(strCheck) = True Then
            MessageBox.Show(strCheck, "IsNullOrEmpty", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Else
            MessageBox.Show(strCheck, "IsNullOrEmpty", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If

    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub

MSDNの注釈にも記載がありますが、IsNullOrEmptyメソッドの中身は以下の様になっています。

result = s Is Nothing OrElse s = String.Empty

メソッド名の通り、Nothingと空文字を同時に判定してくれています。Nothingと空文字を同時に判定したい場合、IsNullOrEmptyメソッドを使用した方が良いですね。

 

編集後記

一見すると、IsNullOrEmptyメソッドだけ使用したほうが良いのでは?と思うかもしれませんが、VB6からマイグレーションされたソースコードや、.NET Framework 1.0の頃のソースコードにはIsNullOrEmptyメソッドが使用されていません。

VB6からのマイグレーションでIsNullOrEmptyメソッドに変えればいいじゃないかと思うかもしれませんが、VB6からVB.NETへのマイグレーションは見積もりが甘いプロジェクトが多く、エラーが発生したところだけ解消するという作業になりがちなので、細部まで手が回りませんので…。

参考サイト

String.IsNullOrEmpty(String) メソッド

docs.microsoft.com

【スポンサーリンク】