StringUtils.isBlank () vs String.isEmpty ()

215

Saya mengalami beberapa kode yang memiliki yang berikut:

String foo = getvalue("foo");
if (StringUtils.isBlank(foo))
    doStuff();
else
    doOtherStuff();

Ini tampaknya secara fungsional setara dengan yang berikut:

String foo = getvalue("foo");
if (foo.isEmpty())
    doStuff();
else
    doOtherStuff();

Apakah perbedaan antara keduanya ( org.apache.commons.lang3.StringUtils.isBlankdan java.lang.String.isEmpty)?

NSA
sumber
7
Mungkin perlu disebutkan bahwa ada juga StringUtils.isEmpty(foo)yang membantu Anda menghindari pointer nol, seperti isBlank, tetapi tidak memeriksa karakter spasi.
Xavi

Jawaban:

380

StringUtils.isBlank()memeriksa bahwa setiap karakter string adalah karakter spasi (atau string kosong atau nol). Ini sama sekali berbeda dari sekadar memeriksa apakah string kosong.

Dari dokumentasi tertaut:

Memeriksa apakah sebuah String adalah spasi, kosong ("") atau null.

 StringUtils.isBlank(null)      = true
 StringUtils.isBlank("")        = true  
 StringUtils.isBlank(" ")       = true  
 StringUtils.isBlank("bob")     = false  
 StringUtils.isBlank("  bob  ") = false

Untuk perbandingan StringUtils.isEmpty :

 StringUtils.isEmpty(null)      = true
 StringUtils.isEmpty("")        = true  
 StringUtils.isEmpty(" ")       = false  
 StringUtils.isEmpty("bob")     = false  
 StringUtils.isEmpty("  bob  ") = false

Peringatan: Dalam java.lang.String .isBlank () dan java.lang.String .isEmpty () bekerja sama kecuali mereka tidak kembali trueuntuk null.

java.lang.String.isBlank()

java.lang.String.isEmpty()

arshajii
sumber
135

Jawaban yang diterima dari @arshajii sepenuhnya benar. Namun hanya menjadi lebih eksplisit dengan mengatakan di bawah ini,

StringUtils.isBlank ()

 StringUtils.isBlank(null)      = true
 StringUtils.isBlank("")        = true  
 StringUtils.isBlank(" ")       = true  
 StringUtils.isBlank("bob")     = false  
 StringUtils.isBlank("  bob  ") = false

StringUtils.isEmpty

 StringUtils.isEmpty(null)      = true
 StringUtils.isEmpty("")        = true  
 StringUtils.isEmpty(" ")       = false  
 StringUtils.isEmpty("bob")     = false  
 StringUtils.isEmpty("  bob  ") = false
nilesh
sumber
14

StringUtils.isBlank() juga akan memeriksa nol, sedangkan ini:

String foo = getvalue("foo");
if (foo.isEmpty())

akan melempar NullPointerExceptionjika foois null.

chut
sumber
4
Ada perbedaan yang lebih besar dari itu; lihat jawaban saya.
arshajii
3
Ini salah. String.isEmpty () akan mengembalikan true jika itu nol. Setidaknya jika Anda berbicara tentang versi apache.commons.lang. Saya tidak yakin tentang versi Spring.
ryoung
1
Arti dari komentar saya telah diedit (agar adil itu bisa lebih jelas dari awal); Saya tidak membandingkan StringUtils.isBlank () dengan StringUtils.isEmpty () - melainkan StringUtils.isBlank () dengan nilai OP.isEmpty ()
chut
1
jawaban chut benar. Jika java String foo adalah null, maka foo.isEmpty () melempar NullPointerException. Apache StringUtils.isBlank (foo) mengembalikan true bahkan jika foo adalah nol.
user2590805
6

StringUtils.isBlankjuga mengembalikan truehanya spasi putih:

isBlank (String str)

Memeriksa apakah sebuah String adalah spasi, kosong ("") atau null.

Octavia Togami
sumber
5

StringUtils.isBlank(foo)akan melakukan pemeriksaan nol untuk Anda. Jika Anda melakukan foo.isEmpty()dan foonol, Anda akan meningkatkan NullPointerException.

Default
sumber
Ada perbedaan yang lebih besar dari itu; lihat jawaban saya.
arshajii
2

StringUtils.isBlank () mengembalikan true untuk blank (hanya spasi putih) dan untuk null String juga. Sebenarnya ini memotong urutan Char dan kemudian melakukan pemeriksaan.

StringUtils.isEmpty () mengembalikan true ketika tidak ada charsequence dalam parameter String atau ketika parameter String adalah nol. Perbedaannya adalah isEmpty () mengembalikan false jika parameter String hanya berisi spasi whiltespaces. Ini menganggap ruang putih sebagai keadaan tidak kosong.

pengguna4555388
sumber
2

Satu-satunya perbedaan antara isBlank () dan isEmpty () adalah:

StringUtils.isBlank(" ")       = true //compared string value has space and considered as blank

StringUtils.isEmpty(" ")       = false //compared string value has space and not considered as empty
disha4mourya
sumber
1
public static boolean isEmpty(String ptext) {
 return ptext == null || ptext.trim().length() == 0;
}

public static boolean isBlank(String ptext) {
 return ptext == null || ptext.trim().length() == 0;
}

Keduanya memiliki kode yang sama bagaimana isBlank menangani spasi putih yang mungkin Anda maksud adalah isBlankString ini memiliki kode untuk menangani spasi putih.

public static boolean isBlankString( String pString ) {
 int strLength;
 if( pString == null || (strLength = pString.length()) == 0)
 return true;
 for(int i=0; i < strLength; i++)
 if(!Character.isWhitespace(pString.charAt(i)))
 return false;
 return false;
}
Apoorva Dhanvanthri
sumber
1

Alih-alih menggunakan lib pihak ketiga, gunakan Java 11 isBlank ()

    String str1 = "";
    String str2 = "   ";
    Character ch = '\u0020';
    String str3 =ch+" "+ch;

    System.out.println(str1.isEmpty()); //true
    System.out.println(str2.isEmpty()); //false
    System.out.println(str3.isEmpty()); //false            

    System.out.println(str1.isBlank()); //true
    System.out.println(str2.isBlank()); //true
    System.out.println(str3.isBlank()); //true
ravthiru
sumber
-2

Saya menjawab ini karena ini adalah hasil teratas di Google untuk "Metode String isBlank ()".

Jika Anda menggunakan Java 11 atau lebih tinggi, Anda bisa menggunakan metode kelas String isBlank () . Metode ini melakukan hal yang sama dengan kelas Apache Commons StringUtils.

Saya telah menulis posting kecil tentang contoh metode ini, baca di sini .

Pankaj
sumber