文字列が空文字かどうかを確認する方法です。比較演算子を使用する方法が一般的ですが、文字列の長さやIsNullOrEmptyメソッドを使用してチェックする方法もあります。
文字列が空文字かチェックする
文字列が空文字かどうかをチェックするにはいくつか方法があります。代表的なものは、
- 「””」「String.Empty」と比較する
- 文字列の長さが0
- String.IsNullOrEmptyメソッド
の3つです。基本的にはこの3つを使用して、文字列が空文字かをチェックしています。色んなソースで使用されているので、見かけることは多々あると思います。
解説例としてテキストボックスとボタンだけを配置したフォームを用意しました。実行ボタンを押下すれば、テキストボックスの値が空文字か確認する処理を実行する簡単なフォームです。
「””」「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へのマイグレーションは見積もりが甘いプロジェクトが多く、エラーが発生したところだけ解消するという作業になりがちなので、細部まで手が回りませんので…。
参考サイト
.