185

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

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
}

そして、すべての場合において、doSomething私の文字列が空であるという事実にもかかわらず、私のプログラム。に等しいnull。それで、それの何が問題になっていますか?

追加した:

問題の原因を見つけました。変数は文字列として宣言され、その結果、nullこの変数に割り当てられたものは"null"!に変換されました。だから、if (!myString.equals("null"))動作します。

4

27 に答える 27

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

equalsさらにコメントとして、契約のこの用語に注意する必要があります。

差出人Object.equals(Object)

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

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

また、x.fieldもしあればx.method()投げます。NullPointerExceptionx == null

于 2010-04-08T17:16:44.650 に答える
31

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

最初に次のようにnullを確認します。

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

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

于 2010-04-08T17:17:45.990 に答える
22

Apache commonsStringUtils.isNotEmptyが最善の方法です。

于 2013-09-09T14:07:10.083 に答える
15

myString が実際に null の場合、参照への呼び出しは Null Pointer Exception (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();
}
于 2012-11-20T17:33:11.460 に答える
7

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

if (myString != null) {
    doSomething
}
于 2010-04-08T17:17:08.643 に答える
6

文字列が 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();
}
于 2010-04-08T17:18:34.147 に答える
6

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

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

次に、必要なときに使用します。

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

上記のように、|| および && 演算子の短絡。つまり、値を決定できるようになるとすぐに停止します。したがって、(string == null) が true の場合、式は常に true になるため、長さの部分を評価する必要はありません。&& も同様で、左辺が false の場合、式は常に false であり、それ以上評価する必要はありません。

追加の注意として、通常、長さを使用することは、.equals を使用するよりも優れたアイデアです。パフォーマンスはわずかに向上し (それほどではありません)、オブジェクトの作成は必要ありません (ただし、ほとんどのコンパイラはこれを最適化する可能性があります)。

于 2012-05-09T22:16:35.917 に答える
5

試す、

myString!=null && myString.length()>0
于 2010-04-08T17:17:17.270 に答える
5

文字列を処理する必要があるたびに (ほとんどの場合)、立ち止まって、空の文字列をチェックする最も速い方法はどれかを考えます。もちろん、string.Length == 0 チェックは、Length がプロパティであり、プロパティの値を取得する以外の処理がないため、最速である必要があります。しかし、なぜ String.Empty があるのでしょうか? 長さよりも String.Empty をチェックする方が速いはずです。さて、私は最終的にそれをテストすることにしました。私は、1,000 万回の繰り返しについて特定のチェックを行うのにかかる時間を教えてくれる小さな Windows コンソール アプリをコーディングしました。NULL 文字列、空の文字列、および "" 文字列の 3 つの異なる文字列をチェックしました。String.IsNullOrEmpty()、str == null、str == null || の 5 つの異なるメソッドを使用しました。str == String.Empty、str == null || str == "", str == null || 力。

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()見栄えが良く、書くのが簡単(かつ高速)なので、他のソリューションよりも使用することをお勧めします。

于 2013-07-08T14:49:25.197 に答える
5
 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

于 2010-04-08T17:23:37.783 に答える
4

私は使用しています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;
    } 
于 2016-10-14T06:50:37.483 に答える
4

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

( myString != null && myString.length() > 0 )
    ? doSomething() : System.out.println("Non valid String");
  • null のテストでは、myString に String のインスタンスが含まれているかどうかがチェックされます。
  • length() は長さを返し、equals("") と同等です。
  • 最初に myString が null かどうかを確認すると、NullPointerException が回避されます。
于 2010-04-08T18:58:10.980 に答える
3

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

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

そうでない場合、 myString には予期しない値が含まれている可能性があります。次のように印刷してみてください。

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

「+」記号を使用して文字列を囲むと、考慮していない余分な空白があるかどうかが表示されます。

于 2010-04-08T17:21:31.590 に答える
3

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

于 2012-05-09T15:36:07.020 に答える
1

isEmptyAndroid では、 のユーティリティ メソッドでこれを確認できますTextUtils

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

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

于 2016-05-25T05:51:52.733 に答える
1

私はアンドロイドでこの問題を抱えていましたが、私はこの方法を使用しています(私のために働きます):

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);
}
于 2014-09-27T12:04:05.503 に答える
0

上記の例のほとんどを、ビルド中の Android アプリの null に対して試してみましたが、すべて失敗しました。だから私はいつでも私のために働く解決策を思いついた.

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

}

したがって、上記のように空の文字列を連結し、「null」に対してテストすると、正常に機能します。実際、例外はスローされません

于 2016-07-29T14:19:06.813 に答える
0

これを使用して、文字列が null に等しいことを確認できます。

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

結果が 0 の場合、(Test+"") = "null" です。

于 2015-08-25T20:31:11.527 に答える
0

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

String myNewString = join(myString, "")
if (!myNewString.equals(""))
{
    //Do something
}
于 2015-05-10T15:06:06.960 に答える
-5

nullでチェックする必要がありますif(str != null).

于 2016-05-23T06:39:34.897 に答える