Ответ 1
Полезный метод от Apache Commons:
org.apache.commons.lang.StringUtils.isBlank(String str)
я уверен, что раньше об этом спрашивали по-разному - поскольку isEmptyOrNull настолько распространен, что люди реализуют его по-разному. но у меня ниже любопытный запрос с точки зрения наилучшего доступного подхода, который хорош как для памяти, так и для производительности.
1) Ниже не учитываются все пробелы, как в случае пустого тега XML
return inputString==null || inputString.length()==0;
2) Внизу позаботьтесь, но триммер может съесть немного производительности + память
return inputString==null || inputString.trim().length()==0;
3) Объединение одного и двух может сэкономить некоторую производительность + память (как предложил Крис в комментариях)
return inputString==null || inputString.trim().length()==0 || inputString.trim().length()==0;
4) Преобразовано в сопоставление с шаблоном (вызывается только в том случае, если строка имеет ненулевую длину)
private static final Pattern p = Pattern.compile("\\s+");
return inputString==null || inputString.length()==0 || p.matcher(inputString).matches();
5) Использование таких библиотек, как - Apache Commons (StringUtils.isBlank/isEmpty
) или spring (StringUtils.isEmpty
) или гуава (Strings.isNullOrEmpty
) или любой другой вариант?
Полезный метод от Apache Commons:
org.apache.commons.lang.StringUtils.isBlank(String str)
Чтобы определить, является ли строка нулевой или пустой, вы можете использовать следующее, не включая какие-либо внешние зависимости от вашего проекта и сохраняя ваш код простым/чистым:
if(myString==null || myString.isEmpty()){
//do something
}
или если также необходимо обнаружить пробелы:
if(myString==null || myString.trim().isEmpty()){
//do something
}
Вы можете легко обернуть их в служебные методы, чтобы быть более краткими, поскольку это очень распространенные проверки:
public final class StringUtils{
private StringUtils() { }
public static bool isNullOrEmpty(string s){
if(s==null || s.isEmpty()){
return true;
}
return false;
}
public static bool isNullOrWhiteSpace(string s){
if(s==null || s.trim().isEmpty()){
return true;
}
return false;
}
}
а затем вызвать эти методы через:
if(StringUtils.isNullOrEmpty(myString)){...}
а также
if(StringUtils.isNullOrWhiteSpace(myString)){...}
Просто чтобы показать java 8 позицию, чтобы удалить нулевые значения.
String s = Optional.ofNullable(myString).orElse("");
if (s.trim().isEmpty()) {
...
}
Имеет смысл, если вы можете использовать Optional<String>
.
Этот один из Google Guava может проверять "пустую и пустую строку" в одно и то же время.
Strings.isNullOrEmpty("Your string.");
Добавить зависимость с Maven
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
с Грейдлом
dependencies {
compile 'com.google.guava:guava:20.0'
}
Apache Commons Lang имеет StringUtils.isEmpty(String str)
который возвращает true, если аргумент пуст или null
Optional.ofNullable(label)
.map(String::trim)
.map(string -> !label.isEmpty)
.orElse(false)
ИЛИ
TextUtils.isNotBlank(label);
последнее решение будет проверять, если не null и триммировать str в одно и то же время
В большинстве случаев StringUtils.isBlank(str)
из библиотеки apache commons будет ее решать. Но если есть случай, когда проверяемая строка ввода имеет нулевое значение в кавычках, он не может проверить такие случаи.
Возьмем пример, когда у меня есть входной объект, который был преобразован в строку с использованием String.valueOf(obj)
. Если ссылка obj равна null, String.valueOf возвращает "null" вместо null.
Когда вы StringUtils.isBlank("null")
использовать, StringUtils.isBlank("null")
, API терпит неудачу, вам, возможно, придется также проверять такие варианты использования, чтобы убедиться, что ваша проверка правильна.
if (str == null || str.trim().length() == 0) {
// str is empty
}
библиотека springframework Проверьте, является ли данная строка пустой.
f(StringUtils.isEmpty("")) {
//.... String is blank or null
}
Вы можете использовать библиотеку Stringutils для Optional и Apache commons.
Optional.ofNullable(StringUtils.noEmpty(string1)).orElse(string2);
здесь он проверит, не является ли string1 нулевым и не пустым, иначе вернет string2
Не видел ни одного полностью нативного решения, поэтому вот одно:
return str == null || str.chars().allMatch(Character::isWhitespace);
По сути, используйте встроенную функцию Character.isWhitespace(). Оттуда вы можете достичь разных уровней оптимизации, в зависимости от того, насколько это важно (могу вас заверить, что в 99,99999% случаев использования дополнительная оптимизация не требуется):
return str == null || str.length() == 0 || str.chars().allMatch(Character::isWhitespace);
Или, чтобы быть действительно оптимальным (но черт возьми)
int len;
if (str == null || (len = str.length()) == 0) return true;
for (int i = 0; i < len; i++) {
if (!Character.isWhitespace(str.charAt(i))) return false;
}
return true;
Одна вещь, которую я люблю делать:
Optional<String> notBlank(String s) {
return s == null || s.chars().allMatch(Character::isWhitepace))
? Optional.empty()
: Optional.of(s);
}
...
notBlank(myStr).orElse("some default")
Если вам нужно проверить более одной строки в одной и той же проверке, вы можете сделать что-то вроде этого:
import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Stream;
public class StringHelper {
public static Boolean hasBlank(String ... strings) {
Predicate<String> isBlank = s -> s == null || s.trim().isEmpty();
return Optional
.ofNullable(strings)
.map(Stream::of)
.map(stream -> stream.anyMatch(isBlank))
.orElse(false);
}
}
Таким образом, вы можете использовать это как StringHelper.hasBlank("Hello", null, "", " ")
или StringHelper.hasBlank("Hello")
в общей форме.