531

文字列がnullでも空でもないかどうかを確認するにはどうすればよいですか?

public void doStuff(String str)
{
    if (str != null && str != "**here I want to check the 'str' is empty or not**")
    {
        /* handle empty string */
    }
    /* ... */
}
4

33 に答える 33

961

isEmpty()はどうですか?

if(str != null && !str.isEmpty())

&&の最初の部分が&&失敗した場合、Java は 2 番目の部分の評価を続行しstr.isEmpty()ないため、この順序での部分を使用してくださいstr

Java SE 1.6 以降でしか利用できないことに注意してください。str.length() == 0以前のバージョンを確認する必要があります。


空白も無視するには:

if(str != null && !str.trim().isEmpty())

(Java 11は、他の Unicode 空白もテストするstr.trim().isEmpty()ように縮小できるため)str.isBlank()

便利な関数にラップ:

public static boolean empty( final String s ) {
  // Null-safe, short-circuit evaluation.
  return s == null || s.trim().isEmpty();
}

なる:

if( !empty( str ) )
于 2010-08-30T08:04:54.507 に答える
229

org.apache.commons.lang.StringUtilsを使用する

私はこれらの種類のもの、特にStringUtilsユーティリティ クラスに Apache commons-langを使用するのが好きです。

import org.apache.commons.lang.StringUtils;

if (StringUtils.isNotBlank(str)) {
    ...
} 

if (StringUtils.isBlank(str)) {
    ...
} 
于 2010-08-30T08:08:51.100 に答える
104

ここに Android を追加するだけです。

import android.text.TextUtils;

if (!TextUtils.isEmpty(str)) {
...
}
于 2013-01-24T21:59:30.997 に答える
51

@BJorn と @SeanPatrickFloyd に追加するには、これを行う Guava の方法は次のとおりです。

Strings.nullToEmpty(str).isEmpty(); 
// or
Strings.isNullOrEmpty(str);

Commons Lang の方が読みやすい場合もありますが、私はゆっくりと Guava に依存するようになりました。また、Commons Lang が混乱することもisBlank()あります (空白とは何かなど)。

Guava の Commons Lang のバージョンは次のisBlankようになります。

Strings.nullToEmpty(str).trim().isEmpty()

許可しない""(空)かつ 疑わしく、バグの可能性があるコードと言うと、許可しないことが理にかなってnullいるすべてのケースを処理できない可能性があります (ただし、SQL については、SQL/HQL が奇妙であるため理解できます)。null''

于 2012-10-30T20:13:54.653 に答える
35
str != null && str.length() != 0

代わりに

str != null && !str.equals("")

また

str != null && !"".equals(str)

注: 2 番目のチェック (1 番目と 2 番目の選択肢) は、str が null ではないことを前提としています。最初のチェックがそれを行っているという理由だけで問題ありません (そして、最初のチェックが false の場合、Java は 2 番目のチェックを行いません)!

重要: 文字列の等価性に == を使用しないでください。== は、値ではなくポインターが等しいことを確認します。2 つの文字列が異なるメモリ アドレス (2 つのインスタンス) に存在する可能性がありますが、値は同じです!

于 2010-08-30T08:04:27.483 に答える
28

私が知っているほとんどすべてのライブラリはStringUtils、 、StringUtilまたはと呼ばれるユーティリティ クラスを定義してStringHelperおり、通常、探しているメソッドが含まれています。

私の個人的なお気に入りはApache Commons / Langです。StringUtilsクラスでは、

  1. StringUtils.isEmpty(String)
  2. StringUtils.isBlank(String)メソッド

(1 つ目は文字列が null または空かどうかをチェックし、2 つ目は文字列が null、空、または空白のみかどうかをチェックします)

Spring、Wicket、および他の多くのライブラリにも同様のユーティリティ クラスがあります。外部ライブラリを使用しない場合は、独自のプロジェクトに StringUtils クラスを導入することをお勧めします。


更新: 何年も経ちましたが、最近ではGuavaStrings.isNullOrEmpty(string)方法を使用することをお勧めします。

于 2010-08-30T08:12:50.917 に答える
25

これは私のために働く:

import com.google.common.base.Strings;

if (!Strings.isNullOrEmpty(myString)) {
       return myString;
}

指定された文字列が null または空の文字列である場合に true を返します。

nullToEmpty を使用して文字列参照を正規化することを検討してください。その場合、このメソッドの代わりに String.isEmpty() を使用できます。また、String.toUpperCase のような特殊な null セーフ形式のメソッドも必要ありません。または、空の文字列を null に変換して「逆方向に」正規化したい場合は、emptyToNull を使用できます。

于 2013-07-11T07:46:08.577 に答える
10

どうですか:

if(str!= null && str.length() != 0 )
于 2010-08-30T08:04:52.300 に答える
7

Apache StringUtils の isNotBlank メソッドを次のように使用します。

StringUtils.isNotBlank(str)

str が null ではなく、空でない場合にのみ true を返します。

于 2011-11-10T08:09:43.767 に答える
7

入力に基づいて true または false を返します

Predicate<String> p = (s)-> ( s != null && !s.isEmpty());
p.test(string);
于 2018-01-25T14:25:49.783 に答える
3

test equals は、同じ条件で空の文字列と null に等しい:

if(!"".equals(str) && str != null) {
    // do stuff.
}

arg が の場合は false を返すNullPointerExceptionため、str が null の場合はスローしません。Object.equals()null

もう 1 つの構成str.equals("")は、dreaded をスローしNullPointerExceptionます。呼び出されるオブジェクトとして文字列リテラルを使用する悪い形式を考える人もいるかもしれませんequals()が、それは仕事をします。

この回答も確認してください:https://stackoverflow.com/a/531825/1532705

于 2013-05-15T15:25:40.553 に答える
2

上で seanizer が言ったように、Apache StringUtils はこれに最適です。guava を含める場合は、次のようにする必要があります。

public List<Employee> findEmployees(String str, int dep) {
 Preconditions.checkState(StringUtils.isNotBlank(str), "Invalid input, input is blank or null");
 /** code here **/
}

また、結果セット内の列をインデックスではなく名前で参照することをお勧めします。これにより、コードの保守がはるかに簡単になります。

于 2010-08-30T08:18:50.233 に答える
2

StringUtils.isEmpty() を使用できます。文字列が null または空の場合は true になります。

 String str1 = "";
 String str2 = null;

 if(StringUtils.isEmpty(str)){
     System.out.println("str1 is null or empty");
 }

 if(StringUtils.isEmpty(str2)){
     System.out.println("str2 is null or empty");
 }

結果として

str1 が null または空です

str2 が null または空です

于 2014-02-12T02:29:22.233 に答える
-1

文字列で null を処理するより良い方法は、

str!=null && !str.equalsIgnoreCase("null") && !str.isEmpty()

要するに、

str.length()>0 && !str.equalsIgnoreCase("null")
于 2018-07-27T13:02:25.657 に答える