StringUtils.isBlank () проти String.isEmpty ()


215

Я наткнувся на якийсь код із таким:

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

Це здається функціонально еквівалентним наступному:

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

Чи є різниця між двома ( org.apache.commons.lang3.StringUtils.isBlankі java.lang.String.isEmpty)?


7
Можливо, варто згадати, що є також такий, StringUtils.isEmpty(foo)який допомагає вам уникнути нульових покажчиків, як isBlank, але не перевіряє наявність символів пробілу.
Хаві

Відповіді:


380

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

Увага: У java.lang.String .isBlank () і java.lang.String .isEmpty () працюють так само , за винятком того, що вони не повернуться trueдо null.

java.lang.String.isBlank()

java.lang.String.isEmpty()


135

Прийнята відповідь від @arshajii абсолютно правильна. Однак ясніше кажучи нижче,

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


14

StringUtils.isBlank() також буде перевіряти на null, тоді як це:

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

викине, NullPointerExceptionякщо fooнуль.


4
Є більша різниця, ніж ця; дивіться мою відповідь.
Аршаджій

3
Це неправильно. String.isEmpty () поверне значення true, якщо воно є нульовим. Принаймні, якщо ви говорите про версію apache.commons.lang. Я не впевнений у весняній версії.
ryoung

1
Значення мого коментаря було відредаговано далеко (якщо справедливо, це могло бути зрозуміліше з початку роботи); Я не порівнював StringUtils.isBlank () до StringUtils.isEmpty () - а StringUtils.isBlank () до ФП в value.isEmpty ()
Chut

1
відповідь чут правильна. Якщо java String foo є null, то foo.isEmpty () викидає NullPointerException. Apache StringUtils.isBlank (foo) повертає true, навіть якщо foo є нульовим.
користувач2590805

6

StringUtils.isBlankтакож повертає trueлише пробіл:

isBlank (рядок рядка)

Перевіряє, чи є рядок пробілом, порожнім ("") чи нулем.


5

StringUtils.isBlank(foo)здійснить нульову перевірку для вас. Якщо ви виконаєте foo.isEmpty()та fooє нульовим, ви піднімете NullPointerException.


Є більша різниця, ніж ця; дивіться мою відповідь.
Аршаджій

2

StringUtils.isBlank () повертає вірно і для пробілів (просто пробілів), і для нульових рядків. Насправді він обрізає послідовності Char, а потім виконує перевірку.

StringUtils.isEmpty () повертає значення true, коли немає параметра слідування у параметрі String або коли параметр String є нульовим. Різниця полягає в тому, що isEmpty () повертає значення false, якщо параметр String містить просто пробіли. Він розглядає пробіли як стан непустості.


2

Єдина різниця між isBlank () та isEmpty ():

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

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;
}

Обидва мають один і той же код, як будеBlank обробляти білі пробіли, ймовірно, ви мали на увазі цеBlankString, у цьому є код для обробки пробілів.

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;
}

1

Замість використання lib сторонніх розробників використовуйте 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

-2

Я відповідаю на це, тому що це найкращий результат в Google за методом "String isBlank ()".

Якщо ви використовуєте Java 11 або вище, ви можете використовувати метод String клас isBlank () . Цей метод робить те саме, що і клас Apache Commons StringUtils.

Я написав невеликий пост про приклади цього методу, прочитайте його тут .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.