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

Я столкнулся с некоторым кодом, который имеет следующее:

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

14 ответов

Решение

StringUtils.isBlank() проверяет, что каждый символ строки является символом пробела (или что строка пуста или что она пуста). Это полностью отличается от проверки, является ли строка пустой.

Из связанной документации:

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

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

Принятый ответ от @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

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

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

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

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

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

бросит NullPointerException если foo нулевой.

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

isBlank (String str)

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

Единственная разница между 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

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

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

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

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

Итог:

      isEmpty take " " as a character but isBlank not. Rest both are same.

Вместо использования сторонней библиотеки используйте Java 11 isBlank()

      System.out.println("".isEmpty());                      //true
System.out.println(" ".isEmpty());                     //false
System.out.println(('\u0020'+" "+'\u0020').isEmpty()); //false

System.out.println("".isBlank());                      //true
System.out.println(" ".isBlank());                     //true
System.out.println(('\u0020'+" "+'\u0020').isBlank()); //true

Если вы хотите использовать Java 8 и вам нужна функция isBlank, попробуйте использовать стороннюю библиотеку org.apache.commons.lang3.StringUtils .

StringUtils.isBlank()

      System.out.println(StringUtils.isBlank(null));      //true
System.out.println(StringUtils.isBlank(""));        //true
System.out.println(StringUtils.isBlank(" "));       //true
System.out.println(StringUtils.isBlank("bob"));     //false
System.out.println(StringUtils.isBlank("  bob  ")); //false

StringUtils.isEmpty

      System.out.println(StringUtils.isEmpty(null));      // = true
System.out.println(StringUtils.isEmpty(""));        //= true
System.out.println(StringUtils.isEmpty(" "));       // = false
System.out.println(StringUtils.isEmpty("foo"));     // = false
System.out.println(StringUtils.isEmpty("  foo  ")); //= false
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;
}

StringUtils.isBlank(myStr) проверяет, является ли строка myStr пробелом, пустой ("") или нулевой.

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

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

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

Другие вопросы по тегам