Проверьте, не является ли строка не нулевой и не пустой - PullRequest
451 голосов
/ 30 августа 2010

Как я могу проверить, не является ли строка нулевой и не пустой?

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

Ответы [ 30 ]

850 голосов
/ 30 августа 2010

А как насчет isEmpty () ?

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

Обязательно используйте части && в этом порядке, потому что java не продолжит оценку второй части, если первая часть && не удастся, таким образом гарантируя, что вы не получите исключение нулевого указателя из str.isEmpty() если str равно нулю.

Осторожно, он доступен только с 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 ) )
199 голосов
/ 30 августа 2010

Использовать org.apache.commons.lang.StringUtils

Мне нравится использовать Apache commons-lang для такого рода вещей, особенно для служебного класса StringUtils :

import org.apache.commons.lang.StringUtils;

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

if (StringUtils.isBlank(str)) {
    ...
} 
103 голосов
/ 25 января 2013

Просто добавьте Android сюда:

import android.text.TextUtils;

if (!TextUtils.isEmpty(str)) {
...
}
45 голосов
/ 31 октября 2012

Для добавления в @BJorn и @SeanPatrickFloyd Гуава может сделать это:

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

Commons Lang иногда более читабелен, но я постепенно больше полагаюсь на Гуаву, а иногда Commons Lang сбивает с толку, когда дело доходит до isBlank() (как в пустом месте).

Версия Guava Commons Lang isBlank будет:

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

Я скажу, что код, который не позволяет "" (пусто) AND null, является подозрительным и потенциально ошибочным, поскольку, вероятно, не обрабатывает все случаи, когда не разрешено null имеет смысл (хотя для SQL я могу понять, что SQL / HQL странно относится к '').

33 голосов
/ 30 августа 2010
str != null && str.length() != 0

альтернативно

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

или

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

Примечание: Вторая проверка (первая и вторая альтернативы) предполагает, что str не равен нулю.Это нормально только потому, что первая проверка делает это (а Java не выполняет вторую проверку, если первая ложна)!

ВАЖНО: НЕ используйте == для равенства строк.== проверяет, равен ли указатель, а не значение.Две строки могут быть по разным адресам памяти (два экземпляра), но иметь одинаковое значение!

25 голосов
/ 30 августа 2010

Почти каждая библиотека, которую я знаю, определяет служебный класс, называемый StringUtils, StringUtil или StringHelper, и они обычно включают в себя метод, который вы ищете.

Мой личный фаворит Apache Commons / Lang , где в классе StringUtils вы получаете

  1. StringUtils.isEmpty (String) и
  2. StringUtils.isBlank (String) method

(Первая проверяет, является ли строка нулевой или пустой, вторая проверяет, является ли она пустой, пустой или пробеломтолько)

В Spring, Wicket и многих других библиотеках есть похожие служебные классы.Если вы не используете внешние библиотеки, вы можете захотеть ввести класс StringUtils в свой собственный проект.


Обновление: прошло много лет, и в эти дни я бы рекомендовал использовать метод Гуава Strings.isNullOrEmpty(string).

24 голосов
/ 11 июля 2013

Это работает для меня:

import com.google.common.base.Strings;

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

Возвращает true, если заданная строка пуста или пуста.

Рассмотрите возможность нормализации ссылок на строки с помощью nullToEmpty.Если вы это сделаете, вы можете использовать String.isEmpty () вместо этого метода, и вам также не понадобятся специальные безопасные от нуля формы методов, такие как String.toUpperCase.Или, если вы хотите нормализовать «в другом направлении» преобразование пустых строк в ноль, вы можете использовать emptyToNull.

11 голосов
/ 30 августа 2010

Как насчет:

if(str!= null && str.length() != 0 )
7 голосов
/ 10 ноября 2011

Используйте метод Apache StringUtils isNotBlank, такой как

StringUtils.isNotBlank(str)

Он вернет истину только в том случае, если str не является нулевым и не пустым.

6 голосов
/ 21 апреля 2015

Вы должны использовать org.apache.commons.lang3.StringUtils.isNotBlank() или org.apache.commons.lang3.StringUtils.isNotEmpty. Решение между этими двумя основано на том, что вы действительно хотите проверить.

isNotBlank () проверяет, что входной параметр:

  • не нуль,
  • не пустая строка ("")
  • не последовательность пробельных символов ("")

isNotEmpty () проверяет только то, что входным параметром является

  • не нуль
  • не пустая строка ("")
...