文字列(String)が空の文字列かを調べるには、「2つの文字列が等しいかを調べる」で紹介したように、等値演算子(VB.NETは=、C#は==)やEqualsメソッドを使って、空の文字列(""やString.Empty)と比較すればよいだけです。
Dim s As String = "こんにちは" If s = "" Then Console.WriteLine("文字列は空です") End If If s = String.Empty Then Console.WriteLine("文字列は空です") End If If s.Equals("") Then Console.WriteLine("文字列は空です") End If If s.Equals(String.Empty) Then Console.WriteLine("文字列は空です") End If
string s = "こんにちは"; if (s == "") { Console.WriteLine("文字列は空です"); } if (s == string.Empty) { Console.WriteLine("文字列は空です"); } if (s.Equals("")) { Console.WriteLine("文字列は空です"); } if (s.Equals(string.Empty)) { Console.WriteLine("文字列は空です"); }
文字列はNULL(VB.NETではNothing、C#ではnull)になり得ますので、もし調べる文字列がNULLである可能性があるならば、空の文字列と比較する前に、NULLでないことを確認しておきます。
ただし、VB.NETの=演算子はNothingと空の文字列を等価と判断しますので、Nothingと空の文字列の両方を確認する必要はありません。
補足:VB.NETでは、IsNothing関数によってNothingかどうか調べることもできます。
Dim s As String = "こんにちは" 'sがNothingでもTrueとなる If s = "" Then Console.WriteLine("文字列は空です") End If If s Is Nothing OrElse s.Equals("") Then Console.WriteLine("文字列は空です") End If
string s = "こんにちは"; if (s == null || s == "") { Console.WriteLine("文字列は空です"); }
.NET Framework 2.0からは、文字列がNULLまたは空の文字列かを調べるために、String.IsNullOrEmptyメソッドの使用が推奨されています。
Dim s As String = "こんにちは" If String.IsNullOrEmpty(s) Then Console.WriteLine("文字列は空です") End If
string s = "こんにちは"; if (string.IsNullOrEmpty(s)) { Console.WriteLine("文字列は空です"); }
以上はたぶん説明するまでも無い事でしょう。これ以降は、もう少し掘り下げてみます。
文字列が空の文字列かを調べる方法としては、文字列のLengthプロパティが0かどうかを調べる方法が最速とされています。これは、文字列同士を比較するよりも、整数同士を比較する方が圧倒的に速いためです。この方法が最速ということはMSDNの「文字列長を使用して空の文字列をテストします」にも書かれているため、確かだと思われます。
Dim s As String = "こんにちは" If s.Length = 0 Then Console.WriteLine("文字列は空です") End If
string s = "こんにちは"; if (s.Length == 0) { Console.WriteLine("文字列は空です"); }
「2つの文字列が等しいかを調べる」で紹介したように、通常は等値演算子よりもEqualsメソッドの方が速いでしょう。
空の文字列を表す""とString.Emptyの違いは微々たる物で、両者はほぼ同じと思って良いでしょう。違いを知りたいという方は、GoogleなどでString.Emptyを検索してみてください。
補足:String.Empty(C#では、string.Empty)とSystem.String.Emptyは同じです。
これらの方法を使って速さを比べた結果が「String.Empty vs. ""」に掲載されています。これによると、やはり文字列のLengthプロパティが0かどうかを調べる方法が最速です。等値演算子とEqualsメソッドの比較では、比較する文字列が空のときは等値演算子の方が速いですが、それ以外ではEqualsメソッドが勝っています。""とString.Emptyでは、非常に差が小さいですが、ほんの少しだけString.Emptyの方が速いという結果になっています。
.NET Framework 2.0以降ではString.IsNullOrEmptyメソッドを使うことが勧められていますが、実は.NET Framework 2.0のString.IsNullOrEmptyメソッドには、NullReferenceExceptionがスローされる可能性があるというバグがあります。これは、「フィードバック: Null Exemption caused by JIt optimisation around String.IsNullOrEmpty」で報告されています。このバグは、.NET Framework 3.5で修正されたようです。
この不具合は少々特別な状況で発生するようなので、あまり気にしなくても良いかもしれません。もし気になるという場合は、.NET Framework 3.5以上でなければ、IsNullOrEmptyを使わずに、次のようにして調べるのが良いでしょう。
Dim s As String = "こんにちは" If s Is Nothing OrElse s.Length = 0 Then Console.WriteLine("文字列は空です") End If
string s = "こんにちは"; if (s == null || s.Length == 0) { Console.WriteLine("文字列は空です"); }
実はIsNullOrEmptyメソッドもこれと同じように調べているため、IsNullOrEmptyメソッドよりもこのようにした方が速いようです。(こちらに測定例があります。)
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。