web-dev-qa-db-ja.com

私の文字列がnullと等しいかどうかを確認するにはどうすればいいですか?

私の文字列に意味のある値がある場合にのみ、何らかのアクションを実行したいと思います。だから、私はこれを試しました。

if (!myString.equals("")) {
doSomething
}

この

if (!myString.equals(null)) {
doSomething
}

この

if ( (!myString.equals("")) && (!myString.equals(null))) {
doSomething
}

この

if ( (!myString.equals("")) && (myString!=null)) {
doSomething
}

この

if ( myString.length()>0) {
doSomething
}

そして、私の文字列IS EMPTYという事実にもかかわらず、私のプログラムdoSomethingはすべての場合において。これはnullと同じです。それで、それは何が悪いのですか?

追加:

私はその問題の原因を見つけました。変数は文字列として宣言されているため、この変数に割り当てられたnull"null"!に変換されました。だから、if (!myString.equals("null"))はうまくいきます。

157
Roman
if (myString != null && !myString.isEmpty()) {
  // doSomething
}

さらなるコメントとして、あなたはequals契約でこの用語を知っているべきです:

Object.equals(Object) から:

Null以外の参照値xについては、x.equals(null)return falseにする必要があります。

nullと比較する方法はx == nullx != nullを使うことです。

さらに、x.fieldの場合、x == nullおよびx.method()NullPointerExceptionをスローします。

219

myStringnullの場合、myString.equals(null)またはmyString.equals("")の呼び出しはNullPointerExceptionで失敗します。 null変数に対してインスタンスメソッドを呼び出すことはできません。

このように最初にnullをチェックします。

if (myString != null && !myString.equals("")) {
    //do something
}

これはmyStringがnullチェックに失敗した場合に.equalsを試みないように 短絡評価 を利用します。

26
Michael Myers

Apache commons StringUtils.isNotEmptyが一番いい方法です。

18
kedar

MyStringが実際にはnullの場合、参照への呼び出しはすべてNULLポインタ例外(NPE)で失敗します。 Java 6以降では、長さチェックの代わりに#isEmptyを使用してください(いずれの場合もチェックで新しい空の文字列を作成しないでください)。

if (myString !=null &&  !myString.isEmpty()){
    doSomething();
}

ちなみに、文字列リテラルと比較した場合、nullチェックを行わないようにするために、ステートメントを逆にします。

if (("some string to check").equals(myString)){
  doSomething();
} 

の代わりに :

if (myString !=null &&  !myString.equals("some string to check")){
    doSomething();
}
10
corm

WORKING !!!!

if (myString != null && !myString.isEmpty()) {
    return true;
}
else {
    return false;
}
6
Salman Nazir

myStringオブジェクトがnullであることを確認する必要があります。

if (myString != null) {
    doSomething
}
5
WhirlWind

文字列がnullの場合、このような呼び出しはNullReferenceExceptionをスローします。

myString.equals(null)

しかし、とにかく、私はこのような方法があなたが望むものであると思います:

public static class StringUtils
{
    public static bool isNullOrEmpty(String myString)
    {
         return myString == null || "".equals(myString);
    }
}

それからあなたのコードで、あなたはこのようなことをすることができます:

if (!StringUtils.isNullOrEmpty(myString))
{
    doSomething();
}
5
Andy White

やってみる

myString!=null && myString.length()>0
4
bragboy

私は文字列を扱わなければならないたびに(ほとんど毎回)私は停止し、どの方法が本当に空の文字列をチェックするための最速の方法であるか疑問に思います。もちろん、Lengthはプロパティなので、string.Length == 0のチェックが最も速いはずです。プロパティの値を取得する以外の処理はありません。しかし、私は自分自身に尋ねる、なぜString.Emptyがあるのですか? String.Emptyの長さよりもチェックする方が速いはずです。まあ私は最終的にそれを試してみることにしました。私は小さなWindowsコンソールアプリケーションをコーディングしました。これは、1000万回のレピュテーションを確認するのにかかる時間を教えてくれます。 NULL文字列、空文字列、 ""文字列の3種類の文字列をチェックしました。私は5つの異なるメソッドを使いました:String.IsNullOrEmpty()、str == null、str == null || str == String.Empty、str == null || str == ""、str == null || str.length ==0。以下が結果です。

String.IsNullOrEmpty()
NULL = 62 milliseconds
Empty = 46 milliseconds
"" = 46 milliseconds

str == null
NULL = 31 milliseconds
Empty = 46 milliseconds
"" = 31 milliseconds

str == null || str == String.Empty
NULL = 46 milliseconds
Empty = 62 milliseconds
"" = 359 milliseconds

str == null || str == ""
NULL = 46 milliseconds
Empty = 343 milliseconds
"" = 78 milliseconds

str == null || str.length == 0
NULL = 31 milliseconds
Empty = 63 milliseconds
"" = 62 milliseconds

これらの結果によると、平均的にstr == nullのチェックが最速ですが、常に探しているものが得られるとは限りません。 if str = String.Emptyまたはstr = ""はfalseになります。次に、2つめの2つ、String.IsNullOrEmpty()str == null || str.length == 0があります。 String.IsNullOrEmpty()は見栄えがよくそして書くのがより簡単(そしてより速い)なので、私は他の解決策よりもそれを使うことを勧めます。

4
ldsant
 if (myString != null && myString.length() > 0) {

        // your magic here

 }

偶然にも、あなたが多くの文字列操作をしているなら、あらゆる種類の便利なメソッドを持つすばらしいSpringクラスがあります。

http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/util/StringUtils.html

4
Richard H

既存のユーティリティを使用するか、独自の方法を作成することをお勧めします。

public static boolean isEmpty(String string) {
    return string == null || string.length() == 0;
}

必要なときにそれを使用してください。

if (! StringUtils.isEmpty(string)) {
  // do something
}

上記のように、|| &&演算子がショートしています。それは、彼らが自分たちの価値を決定することができるとすぐに彼らが止まることを意味します。したがって、(string == null)がtrueの場合、式は常にtrueになるため、長さの部分を評価する必要はありません。 &&と同様に、左側が偽の場合、式は常に偽であり、それ以上評価する必要はありません。

追加の注意として、長さを使用することは一般的に.equalsを使用するより良い考えです。パフォーマンスはやや優れていますが(大したことはありません)、オブジェクトを作成する必要はありません(ほとんどのコンパイラはこれを最適化する可能性があります)。

4
Matt

StringUtil.isBlank(string)を使用しています

文字列が空白かどうかをテストします:null、空、または空白のみ

これが今までで最高です

ここにドキュメントからの元の方法があります

/**
    * Tests if a string is blank: null, emtpy, or only whitespace (" ", \r\n, \t, etc)
    * @param string string to test
    * @return if string is blank
    */
    public static boolean isBlank(String string) {
        if (string == null || string.length() == 0)
            return true;

        int l = string.length();
        for (int i = 0; i < l; i++) {
            if (!StringUtil.isWhitespace(string.codePointAt(i)))
                return false;
        }
        return true;
    } 
3
Max

私はこのようなことをしたいと思います:

( myString != null && myString.length() > 0 )
    ? doSomething() : System.out.println("Non valid String");
  • Nullのテストでは、myStringにStringのインスタンスが含まれているかどうかを確認します。
  • length()は長さを返し、equals( "")と同じです。
  • 最初にmyStringがnullかどうかを確認すると、NullPointerExceptionが回避されます。
3
James P.

これはうまくいくはずです。

if (myString != null && !myString.equals(""))
    doSomething
}

そうでなければ、myStringはおそらくあなたが期待していない値を持っています。このように印刷してみてください。

System.out.println("+" + myString + "+");

文字列を囲むために「+」記号を使用すると、余分な空白があるかどうかがわかりません。

2
elduff

if(str.isEmpty() || str==null){ do whatever you want }

2
Moe

私にとっては、文字列にJavaで意味のある内容が含まれているかどうかを確認するには、次のようにします。

string != null && !string.trim().isEmpty()

最初にnullを避けるために文字列がNullPointerExceptionであるかどうかをチェックし、次に空白しかない文字列をチェックしないようにすべてのスペース文字をトリミングし、最後にトリミングされた文字列が空でない、つまり長さ0かどうかをチェックします。

2
gil.fernandes

さて、これはデータ型がJavaでどのように機能するかです。 (あなたは私の英語を言い訳する必要があります。正しい語彙を使用しないでください。2つを区別する必要があります。基本データ型と通常のデータ型。基本データ型は、ほとんどすべてを構成しています。通常のデータ型または複合データ型はそれ以外のすべてのものです文字列は文字の配列であるため、複合データ型です。

作成したすべての変数は、実際にはメモリ内の値へのポインタです。例えば:

String s = new String("This is just a test");

変数 "s"は文字列を含みません。それはポインタです。このポインタは、メモリ内の変数を指しています。 System.out.println(anyObject)を呼び出すと、そのオブジェクトのtoString()メソッドが呼び出されます。 ObjectのtoStringをオーバーライドしなかった場合は、ポインタを表示します。例えば:

public class Foo{
    public static void main(String[] args) {
        Foo f = new Foo();
        System.out.println(f);
    }
}

>>>>
>>>>
>>>>Foo@330bedb4

"@"の後ろにあるものはすべてポインタです。これは複雑なデータ型に対してのみ機能します。プリミティブデータ型はそれらのポインタに直接保存されます。そのため、実際にはポインタはなく、値は直接格納されます。

例えば:

int i = 123;

この場合、ポインタを格納しません。整数値123(バイト数c)を格納します。

それでは==演算子に戻りましょう。常にポインタを比較し、メモリ内のポインタの位置に保存されているコンテンツは比較しません。

例:

String s1 = new String("Hallo");
String s2 = new String("Hallo");

System.out.println(s1 == s2);

>>>>> false

この両方のStringは異なるポインタを持ちます。 String.equals(String other)ただし、コンテンツを比較します。同じ内容を持つ2つの異なるオブジェクトのポインタは等しいため、プリミティブデータ型を '=='演算子と比較できます。

NULLはポインタが空であることを意味します。デフォルトでは空のプリミティブデータ型は0です(数値の場合)。しかし、どんな複雑なオブジェクトに対してもNULLは、そのオブジェクトが存在しないことを意味します。

ご挨拶

2
Luecx

Androidでは、isEmptyのユーティリティメソッドTextUtilsでこれをチェックできます。

public static boolean isEmpty(CharSequence str) {
    return str == null || str.length() == 0;
}

isEmpty(CharSequence str)メソッドは、nullとlengthの両方の条件をチェックします。

1
NSK

私はAndroidでこの問題を抱えていて、私はこの方法を使っています(私のために働きます):

String test = null;
if(test == "null"){
// Do work
}

しかし、Javaコードで私は使用します:

String test = null;
if(test == null){
// Do work
}

そして:

private Integer compareDateStrings(BeanToDoTask arg0, BeanToDoTask arg1, String strProperty) {
    String strDate0 = BeanUtils.getProperty(arg0, strProperty);_logger.debug("strDate0 = " + strDate0);
    String strDate1 = BeanUtils.getProperty(arg1, strProperty);_logger.debug("strDate1 = " + strDate1);
    return compareDateStrings(strDate0, strDate1);
}

private Integer compareDateStrings(String strDate0, String strDate1) {
    int cmp = 0;
    if (isEmpty(strDate0)) {
        if (isNotEmpty(strDate1)) {
            cmp = -1;
        } else {
            cmp = 0;
        }
    } else if (isEmpty(strDate1)) {
        cmp = 1;
    } else {
        cmp = strDate0.compareTo(strDate1);
    }
    return cmp;
}

private boolean isEmpty(String str) {
    return str == null || str.isEmpty();
}
private boolean isNotEmpty(String str) {
    return !isEmpty(str);
}
1
A.A

私は使うのが好きです:

if(!StringUtils.isBlank(myString)) { // checks if myString is whitespace, empty, or null
    // do something
}

StringUtils.isBlank()とString.isEmpty()を比較してください

1
silver

Androidで作業している場合は、単純なTextUtilsクラスを使用できます。次のコードを確認してください。

if(!TextUtils.isEmpty(myString)){
 //do something
}

これはコードの簡単な使い方です。答えは繰り返されるかもしれません。しかし、あなたのための単一で簡単なチェックを持つのは簡単です。

0
Manmohan Soni

私は、Androidアプリのnullが構築中で、ITがすべて失敗したために上記の例のほとんどを試しました。だから私はいつでも私のために働いた解決策を思い付きました。

String test = null+"";
If(!test.equals("null"){
       //go ahead string is not null

}

ですから、上記のように単に空の文字列を連結して "null"に対してテストすればうまくいきます。実際には例外はスローされません

0
leeCoder

MyStringは文字列ではなく文字列の配列だと思います。これがあなたがする必要があることです:

String myNewString = join(myString, "")
if (!myNewString.equals(""))
{
    //Do something
}
0
mimit

例外も役立ちます。

try {
   //define your myString
}
catch (Exception e) {
   //in that case, you may affect "" to myString
   myString="";
}

これを使ってnullと等しい文字列をチェックすることができます。

String Test = null;
(Test+"").compareTo("null")

結果が0の場合、(Test + "")= "null"になります。

0
Harrouchi Taher