Проверьте, что строка не равна null и не пуста
Заголовок: Как проверить, что строка не равна null
и не пустая?
Описание проблемы:
Я работаю над методом в Java, и мне нужно проверить, что строка не равна null
и не является пустой. Вот фрагмент кода, с которым я работаю:
public void doStuff(String str)
{
if (str != null && str != "**здесь я хочу проверить, пуста ли строка или нет**")
{
/* обработка пустой строки */
}
/* ... */
}
В текущем условии я пытаюсь определить, пуста ли строка, но не знаю, как это правильно сделать. Есть ли какой-то способ сделать проверку на пустую строку в этом условии? Спасибо!
5 ответ(ов)
Конечно, вот пример кода на Android, в котором используется класс TextUtils
для проверки, не является ли строка пустой:
import android.text.TextUtils;
if (!TextUtils.isEmpty(str)) {
// Ваш код здесь, если строка не пуста
...
}
Этот код проверяет, что переменная str
не пустая и не равна null
. Это упрощает проверку и делает код более читаемым. Если строка содержит какой-либо текст, выполнение перейдет внутрь блока if
.
Чтобы дополнить @BJorn и @SeanPatrickFloyd, "гуавый" способ сделать это выглядит так:
Strings.nullToEmpty(str).isEmpty();
// или
Strings.isNullOrEmpty(str);
Commons Lang иногда более читаем, но я постепенно всё больше полагаюсь на Guava, поскольку иногда Commons Lang может быть запутанным, особенно когда дело доходит до метода isBlank()
(в том смысле, что непонятно, что считается пробелом, а что нет).
Версия метода isBlank
из Guava будет:
Strings.nullToEmpty(str).trim().isEmpty();
Хочу отметить, что код, который не допускает ""
(пустую строку) И null
, вызывает подозрения и может содержать ошибки, так как, вероятно, не обрабатывает все случаи, когда запрет на null
имеет смысл (хотя в случае SQL я могу понять, поскольку SQL/HQL странно относятся к ''
).
Ваш вопрос касательно проверки строки на null и на пустоту является очень распространенным в Java. Рассмотрим три способа, которые вы привели:
str != null && str.length() != 0
- этот вариант является самым прямолинейным и простым для понимания. Он проверяет, что строка не равна null и что её длина не равна нулю.str != null && !str.equals("")
- этот вариант также является правильным, однако стоит помнить, что методequals
вызывается на объектеstr
, поэтому в данном случае мы предварительно проверяемstr
на null.str != null && !"".equals(str)
- этот вариант может быть предпочтительным. Он использует методequals
на строковом литерале "", что помогает избежать потенциального NullPointerException, еслиstr
окажется равной null.
Важно отметить, что для проверки на равенство строк в Java следует избегать оператора ==
. Этот оператор сравнивает ссылки на объекты, а не их содержимое. Таким образом, два разных экземпляра строк могут находиться в разных адресах памяти, но при этом иметь одинаковое значение.
Подводя итог, все предложенные вами способы проверки корректны, однако последний вариант (!"".equals(str)
) может быть более безопасным в контексте работы с возможным значением null.
Это работает для меня:
import com.google.common.base.Strings;
if (!Strings.isNullOrEmpty(myString)) {
return myString;
}
Этот метод возвращает true, если переданная строка равна null или представляет собой пустую строку.
Рекомендуется нормализовать ваши строковые ссылки с помощью метода nullToEmpty
. Если вы это сделаете, вы сможете использовать String.isEmpty()
вместо этого метода, и вам не понадобятся специальные безопасные методы для работы с null, такие как String.toUpperCase()
. Если же вы хотите нормализовать "в другую сторону", преобразуя пустые строки в null, вы можете воспользоваться методом emptyToNull
.
В вашем примере проверка строки на null
и на то, что она не пустая, выглядит хорошо. Однако, для улучшения читаемости и удобства использования, можно рассмотреть вариант с использованием библиотеки Apache Commons Lang. Например, метод StringUtils.isNotEmpty()
может сделать ваш код более лаконичным:
import org.apache.commons.lang3.StringUtils;
if (StringUtils.isNotEmpty(str)) {
// ваша логика здесь
}
Этот подход делает код более понятным и уменьшает вероятность ошибок, связанных с ручной проверкой на null
и пустоту строки. Если вы не используете внешние библиотеки, то ваш исходный вариант также полностью допустим и корректен.
Как преобразовать строку в int в Java?
Преобразование 'ArrayList<String>' в 'String[]' в Java
Как сгенерировать случайную алфавитно-цифровую строку
Как преобразовать строку Java в byte[]?
Почему компилятор Java 11 использует invokevirtual для вызова приватных методов?