こんにちは、トミセン(@tomisenblog)です。
文字列がnullか空文字か判定するというのはよくある処理ですが、
「C#のIsNullOrWhiteSpaceって、何?」
「C#のString.IsNullOrWhiteSpaceって、IsNullOrEmptyと何が違うの?」
理解してしまえば便利なテクニックなんですが、意外に分かりやすい情報が見つからなくて思ったより時間がかかってしまっていますよね。
今回はそんなお悩みを解決します。
ずばり!「C# IsNullOrWhiteSpaceとは? IsNullOrEmptyとの違い」についてご紹介します。
それでは一緒に学んでいきましょう!
- IsNullOrWhiteSpaceについて知りたい
- IsNullOrWhiteSpaceとIsNullOrEmptyの違いを知りたい
IsNullOrWhiteSpace とは
文字列がnullか空文字か空白か簡単に判定できる
文字列がnullか空文字か空白かを判定できます。
文字列がnullかどうかをチェックし、さらにnullでない場合は、空の文字列ではないか、空白ではないかをチェックします。
String.IsNullOrWhiteSpaceメソッドは、.NET Framework 4.0以降(= Visual Studio 2010以降)が対象です。
実際のコードはこちらになります。
string stringValue = " "; // 半角と全角の空白
if (string.IsNullOrWhiteSpace(stringValue))
{
Console.WriteLine("nullもしくは空もしくは空白である");
}
else
{
Console.WriteLine("nullでも、空でも、空白でもない");
}
// 【実行結果】
// nullもしくは空もしくは空白である
IsNullOrWhiteSpaceメソッドは、Stringクラスのメソッドなのでstring.を前につけます。
そして、IsNullOrWhiteSpaceに続く()の部分に判定したい文字列をセットします。
文字列が「null」、「空文字」、「空白」いずれかに当てはまる場合にtrueを返します。
IsNullOrEmptyメソッドとは何が違うのでしょうか。次で見ていきます。
IsNullOrWhiteSpaceとIsNullOrEmptyとの違い
違いは「空白」の判定ができるかできないか!
IsNullOrEmptyとの違いは「空白」の判定ができるかできないかです。
IsNullOrWhiteSpaceと同じ判定をIsNullOrEmptyメソッドでするロジックを書いてみると、はっきりと違いがわかります。
次のコードを見てください。
IsNullOrEmptyについて知りたい方は「C# IsNullOrEmpty null・空の判定と使い方のポイント!」をどうぞ。
string stringValue = " "; // 半角と全角の空白
if (string.IsNullOrEmpty(stringValue) || stringValue.Trim().Length == 0)
{
Console.WriteLine("nullもしくは空もしくは空白である");
}
else
{
Console.WriteLine("nullでも、空でも、空白でもない");
}
// 【実行結果】
// nullもしくは空もしくは空白である
|| stringValue.Trim() == “”の部分を追加することで、IsNullOrEmptyでも同じ判定が行えるようになります。.Trim()することで、文字列が空白のみの場合は空文字が返り、空白の判定もできるようになります。
こちらの書き方でも結果は同じなので、どちらでも大丈夫です。
// これでも結果は同じ
if (string.IsNullOrEmpty(stringValue) || stringValue.Trim() == "")
このように、IsNullOrWhiteSpaceとIsNullOrEmptyとの違いは「空白」の判定ができるかできないかです。
違いを確認したところで、いろいろな文字列で判定結果を比較してみましょう。
Console.WriteLine("■null");
Console.WriteLine($"IsNullOrEmpty :{string.IsNullOrEmpty(null)}");
Console.WriteLine($"IsNullOrWhiteSpace:{string.IsNullOrWhiteSpace(null)}");
// 【実行結果】
// ■null
// IsNullOrEmpty :True
// IsNullOrWhiteSpace:True
Console.WriteLine("■string.Empty");
Console.WriteLine($"IsNullOrEmpty :{string.IsNullOrEmpty(string.Empty)}");
Console.WriteLine($"IsNullOrWhiteSpace:{string.IsNullOrWhiteSpace(string.Empty)}");
// 【実行結果】
// ■string.Empty
// IsNullOrEmpty :True
// IsNullOrWhiteSpace:True
Console.WriteLine("■半角スペース+全角スペース");
Console.WriteLine($"IsNullOrEmpty :{string.IsNullOrEmpty(" ")}");
Console.WriteLine($"IsNullOrWhiteSpace:{string.IsNullOrWhiteSpace(" ")}");
// 【実行結果】
// ■半角スペース+全角スペース
// IsNullOrEmpty :False
// IsNullOrWhiteSpace:True
Console.WriteLine("■半角スペースのみ");
Console.WriteLine($"IsNullOrEmpty :{string.IsNullOrEmpty(" ")}");
Console.WriteLine($"IsNullOrWhiteSpace:{string.IsNullOrWhiteSpace(" ")}");
// 【実行結果】
// ■半角スペースのみ
// IsNullOrEmpty :False
// IsNullOrWhiteSpace:True
Console.WriteLine("■タブ");
Console.WriteLine($"IsNullOrEmpty :{string.IsNullOrEmpty("t")}");
Console.WriteLine($"IsNullOrWhiteSpace:{string.IsNullOrWhiteSpace("t")}");
// 【実行結果】
// ■タブ
// IsNullOrEmpty :False
// IsNullOrWhiteSpace:True
Console.WriteLine("■改行コード");
Console.WriteLine($"IsNullOrEmpty :{string.IsNullOrEmpty("rn")}");
Console.WriteLine($"IsNullOrWhiteSpace:{string.IsNullOrWhiteSpace("rn")}");
// 【実行結果】
// ■改行コード
// IsNullOrEmpty :False
// IsNullOrWhiteSpace:True
「半角スペース+全角スペース」や「半角スペースのみ」は「空白」なので結果に差がでます。
「タブ」や「改行コード」で判定に差が出るのは、IsNullOrWhiteSpaceメソッドの内部が次のようになっているからです。
// 内部での判定
return String.IsNullOrEmpty(value) || value.Trim().Length == 0;
value.Trim()のTrimメソッドが削除する文字は、半角、全角のスペース文字、タブ文字、改行文字(キャリッジリターン、ラインフィード)などです。
忘れてしまいがちですが、非常に大切なポイントです!
最後にひとつだけ触れてして終わります。次を見てください。
stringValue = null;
if (string.IsNullOrEmpty(stringValue.Trim()))
{
Console.WriteLine("nullもしくは空もしくは空白である");
}
else
{
Console.WriteLine("nullでも、空でも、空白でもない");
}
// 【実行結果】
// 例外がスローされました: 'System.NullReferenceException'
stringValue.Trim()とTrim()してから引数として渡したロジックです。
Trim()した後にIsNullOrEmptyで判定しているので、一見IsNullOrWhiteSpaceと同じ結果になりそうですが、nullにTrim()をするとSystem.NullReferenceExceptionになるので注意してください!
引数に渡す文字列がnullの可能性がある場合はIsNullOrWhiteSpaceを使うべきですね。
以上、IsNullOrWhiteSpaceとIsNullOrEmptyとの違いでした!
まとめ
IsNullOrWhiteSpaceとIsNullOrEmptyとの違いについて紹介してきました。
C#は便利なメソッドやクラスがたくさんあるのですが、使いこなせるようになるのは時間がかかりますよね。
この記事がコーディングスキルアップの助けになると嬉しいです。
IsNullOrEmptyについて知りたい方は「C# IsNullOrEmpty null・空の判定と使い方のポイント!」をどうぞ。
それでは、また。
こちらの記事も読まれています!
- 【実は簡単】プログラマー未経験から転職する5STEP【あなたの不安も回答】
- プログラミング初心者脱出のためのソースコード修正のコツ
- 【経験ゼロの初心者向け】プログラミングの始め方
- プログラマーがエクセルを使えないって、まずい?
- プログラミングの独学は挫折率9割。たった1つの理由と解決方法(姉妹サイト)