Javaで文字列をnullに対してチェックするにはどうすればよいですか?使ってます
stringname.equalsignorecase(null)
しかし、それは機能していません。
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にStringUtilsというクラスがあり、nullセーフなString操作を提供します。
if (StringUtils.equals(foo, bar)) {
// Do something here.
}
別の応答は冗談であり、これを行う必要があると述べました:
boolean isNull = false;
try {
stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
isNull = true;
}
しないでください。例外的なエラーに対してのみ例外をスローする必要があります。nullが予想される場合は、事前にnullを確認し、例外をスローしないようにする必要があります。
私の頭では、これには2つの理由があります。まず、例外は遅いです。nullに対するチェックは高速ですが、JVMが例外をスローすると、多くの時間がかかります。第2に、事前にnullポインタを確認するだけで、コードの読み取りと保守がはるかに簡単になります。
s == null
動作しませんか?
equals()
を比較する場合にのみ使用する必要があります。ただし、変数がかどうかを確認する場合はnull
、を使用します==
。
Androidで作業している場合は、TextUtilsメソッドを使用します。
TextUtils.isEmpty(str):文字列がnullまたは長さ0の場合、trueを返します。パラメータ:str調べる文字列戻り値:strがnullまたは長さがゼロの場合はtrue
if(TextUtils.isEmpty(str)) {
// str is null or lenght is 0
}
以下はこのメソッドのソースコードです。direcltyを使用できます。
/**
* 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
は、equalsIgnoreCaseがで呼び出されたときですがnull String
、
String nullString = null;
nullString.equalsIgnoreCase(null);
間違いなくNullPointerExceptionが発生します。
したがって、equalsメソッドは、で呼び出すことができないという理由だけで、オブジェクトがnullかどうかをテストするようには設計されていませんnull
。
The MYYNの答えの何が問題だったかわかりません。
if (yourString != null) {
//do fun stuff with yourString here
}
上記のnullチェックはまったく問題ありません。
文字列参照がnull参照でないことがわかっている別の文字列と等しい(大文字と小文字を区別しない)かどうかを確認する場合は、次のようにします。
String x = "this is not a null reference"
if (x.equalsIgnoreCase(yourStringReferenceThatMightBeNull) ) {
//do fun stuff
}
比較している両方の文字列にnull参照があるかどうか疑わしい場合は、NullPointerExceptionの可能性を回避するために、それらの少なくとも1つでnull参照を確認する必要があります。
文字列に「null」値がある場合、使用できます
if(null == stringName){
[code]
}
else
[Error Msg]
もちろんuser351809はstringname.equalsignorecase(null)
NullPointerExceptionをスローします。
参照してください、あなたはstringname
2つの可能な条件に従う文字列オブジェクトを持っています:-
stringname
一部のnull以外の文字列値(「コンピュータ」など):"computer".equalsignorecase(null)
false
。stringname
いnull
値:null.equalsignorecase(null)
true
、null
実行可能なオブジェクトではありませんequalsignorecase()
方法を。したがって、ケース2が原因で例外が発生
します。単に使用することをお勧めしますstringname == null
簡単な方法:
public static boolean isBlank(String value) {
return (value == null || value.equals("") || value.equals("null") || value.trim().equals(""));
}
Java 7を使用すると、
if (Objects.equals(foo, null)) {
...
}
true
両方のパラメータがの場合に返されますnull
。
これはかなり前に回答されたことに気づきましたが、この投稿を見たことがないので、自分のしていることを共有したいと思いました。これはコードの読みやすさには特に適していませんが、一連のnullチェックを実行する必要がある場合は、次のように使用します。
String someString = someObject.getProperty() == null ? "" : someObject.getProperty().trim();
この例では、文字列に対してtrimが呼び出されます。これにより、文字列がnullまたはスペースの場合にNPEがスローされますが、同じ行でnullまたは空白をチェックして、大量の(more )ifブロックの場合はフォーマットが困難です。
私が正しく理解していれば、これでうまくいくはずです。
if(!stringname.isEmpty())
// an if to check if stringname is not null
if(stringname.isEmpy())
// an if to check if stringname is null
さて、最後に誰かがこのばかげた質問をしたとき、答えは次のとおりでした:
someString.equals("null")
ただし、この「修正」は、そもそもどうnull
なるかというより大きな問題を隠すだけ"null"
です。
これを行うには2つの方法があります。SayString == nullまたはstring.equals() ..
public class IfElse {
public int ifElseTesting(String a){
//return null;
return (a== null)? 0: a.length();
}
}
public class ShortCutifElseTesting {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("enter the string please:");
String a=scanner.nextLine();
/*
if (a.equals(null)){
System.out.println("you are not correct");
}
else if(a.equals("bangladesh")){
System.out.println("you are right");
}
else
System.out.println("succesful tested");
*/
IfElse ie=new IfElse();
int result=ie.ifElseTesting(a);
System.out.println(result);
}
}
この例を確認してください。IfElseのショートカットバージョンの別の例を次に示します。