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)?

NSA
источник
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()

arshajii
источник
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
Nilesh
источник
39

StringUtils isEmpty = String isEmpty проверяет + проверяет нулевое значение.

StringUtils isBlank = StringUtils isEmpty проверяет + проверяет, содержит ли текст только пробельные символы.

Полезные ссылки для дальнейшего изучения:

yallam
источник
14

StringUtils.isBlank() также проверит на ноль, тогда как это:

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

бросит, NullPointerExceptionесли fooноль.

да ну же
источник
4
Есть большая разница, чем это; смотри мой ответ.
Аршаджи
3
Это неверно String.isEmpty () вернет true, если оно равно нулю. По крайней мере, если вы говорите о версии apache.commons.lang. Я не уверен насчет версии Spring.
Рюнг
1
Значение моего комментария было отредактировано (чтобы быть справедливым, это могло быть более ясно с самого начала); Я не сравнивал StringUtils.isBlank () с StringUtils.isEmpty () - скорее StringUtils.isBlank () со значением OP.isEmpty ()
chut
1
ответ чута правильный. Если java String foo имеет значение null, то foo.isEmpty () генерирует исключение NullPointerException. Apache StringUtils.isBlank (foo) возвращает true, даже если foo равно нулю.
user2590805
6

StringUtils.isBlankтакже возвращается trueтолько для пробелов:

isBlank (String str)

Проверяет, является ли строка пустым, пустым ("") или пустым.

Октавия Тогами
источник
5

StringUtils.isBlank(foo)выполнит для вас нулевую проверку. При выполнении foo.isEmpty()и fooимеет нулевое значение, вы будете поднимать NullPointerException.

По умолчанию
источник
Есть большая разница, чем это; смотри мой ответ.
Аршаджи
2

StringUtils.isBlank () возвращает true для пробелов (только пробелы), а также для нулевой строки. На самом деле он обрезает последовательности Char и затем выполняет проверку.

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

user4555388
источник
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
disha4mourya
источник
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;
}

Оба имеют одинаковый код, как isBlank будет обрабатывать пробелы, возможно, вы имели в виду isBlankString, в котором есть код для обработки пробелов.

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

Вместо использования сторонних библиотек используйте 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
источник
-2

Я отвечаю на это, потому что это лучший результат в Google для "String isBlank () Method".

Если вы используете Java 11 или выше, вы можете использовать класс String isBlank () . Этот метод делает то же самое, что и класс Apache Commons StringUtils.

Я написал небольшой пост о примерах этого метода, прочитайте его здесь .

Панкай
источник