Javaでnullに対して文字列をチェックするにはどうすればよいですか?使ってます
stringname.equalsignorecase(null)
しかし、それは機能していません。
string == null
は、オブジェクトがnullかどうかを比較します。 string.equals("foo")
は、そのオブジェクト内の値を比較します。 string == "foo"
は常に動作するとは限りません。オブジェクトが表す値ではなく、オブジェクトが同じかどうかを確認しようとしているためです。
長い回答:
あなたがこれを試しても、あなたが見つけたように、それは動作しません:
String foo = null;
if (foo.equals(null)) {
// That fails every time.
}
その理由は、fooがnullであるため、.equalsが何であるかを知らないためです。 .equalsを呼び出すオブジェクトはありません。
あなたがおそらく望んでいたのは:
String foo = null;
if (foo == null) {
// That will work.
}
文字列を扱うときにnullから身を守る典型的な方法は次のとおりです。
String foo = null;
String bar = "Some string";
...
if (foo != null && foo.equals(bar)) {
// Do something here.
}
そうすれば、fooがnullの場合、条件の後半を評価せず、問題はありません。
(変数の代わりに)文字列リテラルを使用している場合の簡単な方法は次のとおりです。
String foo = null;
...
if ("some String".equals(foo)) {
// Do something here.
}
それを回避したい場合、Apache Commonsには、nullセーフな文字列操作を提供するクラス- StringUtils -があります。
if (StringUtils.equals(foo, bar)) {
// Do something here.
}
別の応答は冗談でした、そして、あなたはこれをするべきだと言いました:
boolean isNull = false;
try {
stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
isNull = true;
}
しないでください。例外的なエラーに対してのみ例外をスローする必要があります。 nullを期待している場合は、事前にそれを確認し、例外をスローさせないようにする必要があります。
私の頭の中には、これには2つの理由があります。まず、例外は遅いです。 nullに対するチェックは高速ですが、JVMが例外をスローすると、多くの時間がかかります。第二に、事前にヌルポインターをチェックするだけで、コードの読み取りと保守がはるかに簡単になります。
s == null
動作しませんか?
確かに動作します。コードの重要な部分を見逃しています。次のようにするだけです。
boolean isNull = false;
try {
stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
isNull = true;
}
;)
TextUtilsメソッドを使用します。
TextUtils.isEmpty(str):文字列がnullまたは長さ0の場合、trueを返します。パラメータ:str調べる文字列戻り値:strがnullまたは長さゼロの場合はtrue
if(TextUtils.isEmpty(str)) {
// str is null or lenght is 0
}
以下は、このメソッドの ソースコード です
/**
* Returns true if the string is null or 0-length.
* @param str the string to be examined
* @return true if str is null or zero length
*/
public static boolean isEmpty(CharSequence str) {
if (str == null || str.length() == 0)
return true;
else
return false;
}
EqualsIgnoreCaseメソッドの実装を見ると、次の部分が見つかります。
if (string == null || count != string.count) {
return false;
}
そのため、引数がfalse
の場合、常にnull
を返します。そして、これは明らかに正しいです。なぜなら、true
を返す必要があるのは、null String
でequalsIgnoreCaseが呼び出されたときだけですが、
String nullString = null;
nullString.equalsIgnoreCase(null);
間違いなくNullPointerExceptionが発生します。
したがって、equalsメソッドは、null
で呼び出せないという理由だけで、オブジェクトがnullかどうかをテストするようには設計されていません。
これは少し奇妙に見えますが、...
stringName == null || "".equals(stringName)
この方法で問題が発生したことはありません。さらに、潜在的なヌルポイント例外を回避しながらチェックするのがより安全な方法です。
The MYYNの答えが何が悪かったのかわかりません。
if (yourString != null) {
//do fun stuff with yourString here
}
上記のヌルチェックは大丈夫です。
文字列参照が、大文字と小文字を区別せずに、knowがnull参照ではない別の文字列と等しいかどうかを確認する場合は、次のようにします。
String x = "this is not a null reference"
if (x.equalsIgnoreCase(yourStringReferenceThatMightBeNull) ) {
//do fun stuff
}
比較する両方の文字列にnull参照があるかどうかに疑問がある場合は、NullPointerExceptionの可能性を回避するために、少なくとも一方のnull参照を確認する必要があります。
文字列が「null」値を持っている場合は、使用できます
if(null == stringName){
[code]
}
else
[Error Msg]
クラスにインポートします
import org.Apache.commons.lang.StringUtils;
それを使用すると、両方ともtrueを返します
System.out.println(StringUtils.isEmpty(""));
System.out.println(StringUtils.isEmpty(null));
String == nullで確認できます
これは私のために働く
String foo = null;
if(foo == null){
System.out.println("String is null");
}
簡単な方法:
public static boolean isBlank(String value) {
return (value == null || value.equals("") || value.equals("null") || value.trim().equals(""));
}
もちろんuser351809、stringname.equalsignorecase(null)
はNullPointerExceptionをスローします。
参照してください、2つの可能な条件に従う文字列オブジェクトstringname
があります。
stringname
には、null以外の文字列値(「コンピューター」など)があります。"computer".equalsignorecase(null)
false
として期待される応答を取得します。stringname
にはnull
値があります:null.equalsignorecase(null)
true
としての応答を期待できます。null
はequalsignorecase()
メソッドを実行できるオブジェクトではありません。したがって、ケース2により例外が発生します。stringname == null
を使用することをお勧めします
返されるvalue
がnullの場合、次を使用します。
if(value.isEmpty());
Javaでif(value == null)
のnullをチェックするとき、Stringがnullであってもtrueにならない場合があります。
Java 7では、次を使用できます
if (Objects.equals(foo, null)) {
...
}
両方のパラメーターがtrue
の場合、null
を返します。
これはかなり前に回答されたことに気づきましたが、これが投稿されたのを見たことがないので、私は自分がしていることを共有したいと思いました。これはコードの可読性には特に適していませんが、一連のヌルチェックを行う必要がある場合は、次のように使用します。
String someString = someObject.getProperty() == null ? "" : someObject.getProperty().trim();
この例では、文字列に対してtrimが呼び出され、文字列がnullまたはスペースである場合にNPEがスローされますが、同じ行でnullまたは空白をチェックして、( )ifブロックのフォーマットは困難です。