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

Другой подход заключается в том, чтобы вместо этого использовать Perl Regexp :: Optimizer [GG] Дэн Когай.

  use Regexp::Optimizer;
  my $o  = Regexp::Optimizer->new->optimize(qr/foobar|fooxar|foozap/);
  # $re is now qr/foo(?:[bx]ar|zap)/

.. сначала оптимизируйте и затем отбросьте все избыточные шаблоны.

Возможно, еще более полезно помочь Ron Savage's Regexp :: Assemble . Он позволяет собирать произвольное количество регулярных выражений в одно регулярное выражение, которое соответствует всем, что соответствует отдельным RE. * Или комбинация обоих.

* Однако вам нужно знать некоторые различия между Perl и Java или другие PCRE-ароматы.

460
задан Dukeling 12 September 2017 в 18:26
поделиться

6 ответов

А как насчет 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 ) )
872
ответ дан 22 November 2019 в 22:54
поделиться
str != null && str.length() != 0

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

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

или

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

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

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

33
ответ дан 22 November 2019 в 22:54
поделиться

Используйте org.apache.commons.lang.StringUtils

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

import org.apache.commons.lang.StringUtils;

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

if (StringUtils.isBlank(str)) {
    ...
} 
203
ответ дан 22 November 2019 в 22:54
поделиться

Как сказал выше seanizer, Apache StringUtils отлично подходит для этого, если вы хотите включить гуаву, вы должны сделать следующее;

public List<Employee> findEmployees(String str, int dep) {
 Preconditions.checkState(StringUtils.isNotBlank(str), "Invalid input, input is blank or null");
 /** code here **/
}

Могу ли я также порекомендовать вам ссылаться на столбцы в вашем наборе результатов по имени, а не по индексу, это значительно облегчит поддержку вашего кода.

2
ответ дан 22 November 2019 в 22:54
поделиться

Как насчет:

if(str!= null && str.length() != 0 )
11
ответ дан 22 November 2019 в 22:54
поделиться

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

Лично мне больше всего нравится Apache Commons/Lang, где в классе StringUtils вы получаете как

  1. StringUtils.isEmpty(String), так и
  2. . ] StringUtils.isBlank(String) метод

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

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


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

25
ответ дан 22 November 2019 в 22:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: