web-dev-qa-db-ja.com

文字列がnullでなく、空でもないかどうかを確認します

文字列がnullでなく、空でもないかどうかをどうやって確認できますか?

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

isEmpty() についてはどうですか。

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

&&の最初の部分が失敗した場合、Javaは2番目の部分を評価しないため、&&の部分をこの順序で使用してください。したがって、strがnullの場合、str.isEmpty()からnullポインタ例外が発生しません。 。

注意してください、それはJava SE 1.6以降で利用可能です。以前のバージョンではstr.length() == 0を確認する必要があります。


空白も無視するには

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

(Java 11以降、str.trim().isEmpty()str.isBlank()に減らすことができます。これは他のUnicode空白文字もテストします)

便利な機能に包まれて:

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

になります:

if( !empty( str ) )
843
Colin Hebert

org.Apache.commons.lang.StringUtils を使用してください。

私はApache commons-lang をこれらの種類の事、そして特に StringUtils ユーティリティクラスに使うのが好きです:

import org.Apache.commons.lang.StringUtils;

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

if (StringUtils.isBlank(str)) {
    ...
} 
197
Romain Linsolas

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

import Android.text.TextUtils;

if (!TextUtils.isEmpty(str)) {
...
}
103
phreakhead

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

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

Commons Langは時々より読みやすくなりますが、私はゆっくりとGuavaに頼っています。また、Commons LangはisBlank()(空白かどうかなど)に関して混乱することがあります。

Commons Langのグアバ版isBlankは次のようになります。

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

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

47
Adam Gent
str != null && str.length() != 0

あるいは

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

または

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

注:2番目のチェック(1番目と2番目の選択肢)では、strがnullではないと想定しています。最初のチェックがそれを行っているからといって問題ありません(最初のチェックがfalseの場合、Javaは2番目のチェックを行いません)。

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

33
helios

これは私のために働く:

import com.google.common.base.Strings;

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

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

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

24
Javatar

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

私の個人的なお気に入りは Apache Commons/Lang です。ここで、 StringUtils クラスでは、両方を取得できます。

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

(最初のものは文字列がnullか空かをチェックし、2番目のものはnullか空か空白のみかをチェックします)

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


更新日:何年も経ちましたが、最近では GuavaStrings.isNullOrEmpty(string) メソッドの使用をお勧めします。

23

どうですか?

if(str!= null && str.length() != 0 )
11
codaddict

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

StringUtils.isNotBlank(str)

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

7
A Null Pointer

org.Apache.commons.lang3.StringUtils.isNotBlank()またはorg.Apache.commons.lang3.StringUtils.isNotEmptyを使うべきです。これら2つの間の決定はあなたが実際に確認したいものに基づいています。

isNotBlank() は、入力パラメータが次のとおりであることを確認します。

  • nullではない
  • 空の文字列ではない( "")
  • 一連の空白文字( "")ではない

isNotEmpty() は、入力パラメータが

  • nullではない
  • 空の文字列ではない( "")
6
gprasant

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

Predicate<String> p = (s)-> ( s != null && !s.isEmpty());
p.test(string);
5

ライブラリ全体を含めたくない場合は、必要なコードを含めるだけです。あなたは自分でそれを維持しなければなりません。しかし、それはかなり簡単な機能です。ここでは commons.Apache.org からコピーされています。

    /**
 * <p>Checks if a String is whitespace, empty ("") or null.</p>
 *
 * <pre>
 * StringUtils.isBlank(null)      = true
 * StringUtils.isBlank("")        = true
 * StringUtils.isBlank(" ")       = true
 * StringUtils.isBlank("bob")     = false
 * StringUtils.isBlank("  bob  ") = false
 * </pre>
 *
 * @param str  the String to check, may be null
 * @return <code>true</code> if the String is null, empty or whitespace
 * @since 2.0
 */
public static boolean isBlank(String str) {
    int strLen;
    if (str == null || (strLen = str.length()) == 0) {
        return true;
    }
    for (int i = 0; i < strLen; i++) {
        if ((Character.isWhitespace(str.charAt(i)) == false)) {
            return false;
        }
    }
    return true;
}
5
Tom

それは少し手遅れです、しかしここにチェックの機能的なスタイルがあります:

Optional.ofNullable(str)
    .filter(s -> !(s.trim().isEmpty()))
    .ifPresent(result -> {
       // your query setup goes here
    });
5
pilot

Java-11 :に新しいメソッドがあります。String#isBlank

文字列が空であるか空白文字コードポイントのみを含む場合はtrueを返し、そうでない場合はfalseを返します。

jshell> "".isBlank()
$7 ==> true

jshell> " ".isBlank()
$8 ==> true

jshell> " ! ".isBlank()
$9 ==> false

これをOptionalと組み合わせて、文字列がnullか空かを確認できます。

boolean isNullOrEmpty = Optional.ofNullable(str).map(String::isBlank).orElse(true);

文字列#isBlank

4
Anton Balaniuc

testは、同じ条件式で空の文字列とnullに等しくなります。

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

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

他の構文str.equals("")は恐ろしいNullPointerExceptionを投げます。 equals()が呼ばれるときにオブジェクトとして文字列リテラルを使う悪い形式を考えるかもしれませんが、それは仕事をします。

また、この答えを確認してください: https://stackoverflow.com/a/531825/1532705

3
Mindwin

簡単な解決策:

private boolean stringNotEmptyOrNull(String st) {
    return st != null && !st.isEmpty();
}
3
Shweta

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 **/
}

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

2
BjornS

if(str != null && !str.isEmpty && str2 != null && !str2.isEmpty)でいっぱいのif文を持つのではなく、一度に複数の文字列をチェックするための私自身のユーティリティ関数を作りました。これが機能です。

public class StringUtils{

    public static boolean areSet(String... strings)
    {
        for(String s : strings)
            if(s == null || s.isEmpty)
                return false;

        return true;
    }   

}

だから私は簡単に書くことができます:

if(!StringUtils.areSet(firstName,lastName,address)
{
    //do something
}
2
W.K.S

Java 8を使用していて、より機能的なプログラミング手法を取りたい場合は、コントロールを管理するFunctionname__を定義してから、必要に応じてそれを再利用し、apply()を使用することができます。

練習に来て、あなたはFunctionname__を次のように定義することができます。

Function<String, Boolean> isNotEmpty = s -> s != null && !"".equals(s)

それから、apply()メソッドを呼び出すだけで使用できます。

String emptyString = "";
isNotEmpty.apply(emptyString); // this will return false

String notEmptyString = "StackOverflow";
isNotEmpty.apply(notEmptyString); // this will return true

お望みなら、Functionname__が空かどうか調べるStringname__を定義し、それを!で否定することができます。

この場合、Functionname__は次のようになります。

Function<String, Boolean> isEmpty = s -> s == null || "".equals(s)

それから、apply()メソッドを呼び出すだけで使用できます。

String emptyString = "";
!isEmpty.apply(emptyString); // this will return false

String notEmptyString = "StackOverflow";
!isEmpty.apply(notEmptyString); // this will return true
1
araknoid

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または空です

1
Vivek Vermani

私はあなたの実際の必要性に従ってグアバかApacheコモンズに助言するでしょう。私のサンプルコードでさまざまな動作を確認してください。

import com.google.common.base.Strings;
import org.Apache.commons.lang.StringUtils;

/**
 * Created by hu0983 on 2016.01.13..
 */
public class StringNotEmptyTesting {
  public static void main(String[] args){
        String a = "  ";
        String b = "";
        String c=null;

    System.out.println("Apache:");
    if(!StringUtils.isNotBlank(a)){
        System.out.println(" a is blank");
    }
    if(!StringUtils.isNotBlank(b)){
        System.out.println(" b is blank");
    }
    if(!StringUtils.isNotBlank(c)){
        System.out.println(" c is blank");
    }
    System.out.println("Google:");

    if(Strings.isNullOrEmpty(Strings.emptyToNull(a))){
        System.out.println(" a is NullOrEmpty");
    }
    if(Strings.isNullOrEmpty(b)){
        System.out.println(" b is NullOrEmpty");
    }
    if(Strings.isNullOrEmpty(c)){
        System.out.println(" c is NullOrEmpty");
    }
  }
}

結果:
アパッチ:
aは空白です
bは空白です
cは空白です
Google:
bはNullOrEmptyです。
cはNullOrEmptyです。

1
BlondCode

もしあなたがSpring Bootを使っているのであれば、以下のコードがその仕事をするでしょう。

StringUtils.hasLength(str)
1
Avinash

Java 8省略可能 を使えば:

public Boolean isStringCorrect(String str) {
    return Optional.ofNullable(str)
            .map(String::trim)
            .map(string -> !str.isEmpty())
            .orElse(false);
}

この式では、スペースで構成されるStringも扱います。

1
Stas

完全を期すために:あなたが すでにSpringフレームワーク を使っているのであれば、StringUtilsを指定して メソッドを提供してください

org.springframework.util.StringUtils.hasLength(String str)

Stringがnullではなく長さを持つ場合はtrue

メソッドと同様に

org.springframework.util.StringUtils.hasText(String str)

Stringがnullでなく、長さが0より大きく、空白のみを含まない場合はtrue

0
l00tr

オブジェクト内のすべての文字列属性が空かどうかを確認するには(JavaリフレクションAPIのアプローチに従って、すべてのフィールド名に!= nullを使用する代わりに)

private String name1;
private String name2;
private String name3;

public boolean isEmpty()  {

    for (Field field : this.getClass().getDeclaredFields()) {
        try {
            field.setAccessible(true);
            if (field.get(this) != null) {
                return false;
            }
        } catch (Exception e) {
            System.out.println("Exception occurred in processing");
        }
    }
    return true;
}

このメソッドは、すべてのStringフィールド値が空白の場合はtrueを返します。String属性にいずれかの値が存在する場合はfalseを返します。

0
Lokeshkumar R

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

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

要するに、

str.length()>0 && !str.equalsIgnoreCase("null")

簡単に言えば、空白も無視します。

if (str == null || str.trim().length() == 0) {
    // str is empty
} else {
    // str is not empty
}
0
simhumileco

もしあなたがSpringフレームワークを使っているなら、あなたはmethodを使うことができます:

org.springframework.util.StringUtils.isEmpty(@Nullable Object str);

このメソッドは引数として任意のObjectを受け入れ、それをnullおよび空のStringと比較します。結果として、このメソッドはnull以外のString以外のオブジェクトに対してはtrueを返しません。

0
Taras Melnyk

"null"(文字列として)を空と見なす必要があることを確認する必要があるという状況に遭遇しました。空白と実際の null もtrueを返す必要があります。私はついに次の機能に決着しました...

public boolean isEmpty(String testString) {
  return ((null==testString) || "".equals((""+testString).trim()) || "null".equals((""+testString).toLowerCase()));
}
0
Dave