26 ответов:
а как же isEmpty () ?
if(str != null && !str.isEmpty())будьте уверены, чтобы использовать части
&&в этом порядке, потому что java не будет продолжать оценивать вторую часть, если первая часть&&терпит неудачу, таким образом, гарантируя, что вы не получите исключение нулевого указателя отstr.isEmpty()еслиstrимеет значение null.будьте осторожны, он доступен только с Java SE 1.6. Вы должны проверить
str.length() == 0на предыдущих версиях.
игнорировать пробелы как ну:
if(str != null && !str.trim().isEmpty())завернутый в удобную функцию:
public static boolean empty( final String s ) { // Null-safe, short-circuit evaluation. return s == null || s.trim().isEmpty(); }будет:
if( !empty( str ) )
использовать орг.апаш.палата общин.ленг.StringUtils
мне нравится использовать Apache commons-lang для таких вещей, и особенно StringUtils утилиты > класс:
import org.apache.commons.lang.StringUtils; if (StringUtils.isNotBlank(str)) { ... } if (StringUtils.isBlank(str)) { ... }
чтобы добавить к @BJorn и @SeanPatrickFloyd способ гуавы сделать это:
Strings.nullToEmpty(str).isEmpty(); // or Strings.isNullOrEmpty(str);Commons Lang иногда более читаем, но я медленно полагался больше на Guava plus иногда Commons Lang сбивает с толку, когда дело доходит до
isBlank()(как в том, что является пробелом или нет).версия гуавы Commons Lang
isBlankбудет:Strings.nullToEmpty(str).trim().isEmpty()Я скажу код, который не позволяет
""(пусто) иnullподозрительно и потенциально багги в том, что он, вероятно, не обрабатывает все случаи, когда не позволяетnullимеет смысл (хотя для SQL я могу понять, как SQL / HQL странно'').
str != null && str.length() != 0как вариант
str != null && !str.equals("")или
str != null && !"".equals(str)Примечание: вторая проверка (первая и вторая альтернативы) предполагает, что str не является нулем. Это нормально только потому, что первая проверка делает это (и Java не делает вторую проверку, если первая ложь)!
важно: не используйте == для равенства строк. = = проверяет, что указатель равен, а не значение. Две строки могут быть в разных адресах памяти (два экземпляра), но имеют одинаковое значение!
это работает для меня:
import com.google.common.base.Strings; if (!Strings.isNullOrEmpty(myString)) { return myString; }возвращает true, если данная строка имеет значение null или является пустой строкой.
рассмотрите возможность нормализации ссылок на строки с помощью nullToEmpty. Если вы вы можете использовать строку.пустой() вместо этого метода, и вы не нужны специальные null-безопасные формы методов, таких как String.прописные буквы любой. Или, если вы хотите нормализовать "в другом направлении," преобразования пустой строки в null, вы можете использовать пусто.
почти каждая библиотека, которую я знаю, определяет служебный класс под названием
StringUtils,StringUtilилиStringHelper, и они обычно включают в себя метод, который вы ищете.
мой личный фаворит Apache Commons / Lang, где в StringUtils класс, вы получите как(первый проверяет, является ли строка пустой или пустой, второй проверяет, является ли она пустой, пустой или только пробел)
есть аналогичные классы полезности весной, калитка и много других библиотек. Если вы не используете внешние библиотеки, вы можете ввести класс StringUtils в свой собственный проект.
обновление: прошло много лет, и в эти дни я бы рекомендовал использовать гуавы ' s
Strings.isNullOrEmpty(string)метод.
используйте метод isNotBlank Apache StringUtils, например
StringUtils.isNotBlank(str)он вернет true только в том случае, если str не является null и не является пустым.
Если вы не хотите включать всю библиотеку; просто включите код, который вы хотите от него. Вам придется поддерживать его самостоятельно; но это довольно прямолинейная функция. Здесь он скопирован из commons.apache.org
/** * <p>Checks if a String is whitespace, empty ("") or null.</p> * * <pre> * StringUtils.isBlank(null) = true * StringUtils.isBlank("") = true * StringUtils.isBlank(" ") = true * StringUtils.isBlank("bob") = false * StringUtils.isBlank(" bob ") = false * </pre> * * @param str the String to check, may be null * @return <code>true</code> if the String is null, empty or whitespace * @since 2.0 */ public static boolean isBlank(String str) { int strLen; if (str == null || (strLen = str.length()) == 0) { return true; } for (int i = 0; i < strLen; i++) { if ((Character.isWhitespace(str.charAt(i)) == false)) { return false; } } return true; }
вы должны использовать
org.apache.commons.lang3.StringUtils.isNotBlank()илиorg.apache.commons.lang3.StringUtils.isNotEmpty. Решение между этими двумя основывается на том, что вы на самом деле хотите проверить.The isNotBlank () проверяет, что входной параметр:
- не Null,
- не пустая строка ("")
- не последовательность пробелов (" ")
The isNotEmpty() проверяет только, что входной параметр
- не null
- не пустая строка ("")
немного поздно, но вот функциональный стиль проверки:
Optional.ofNullable(str) .filter(s -> !(s.trim().isEmpty())) .ifPresent(result -> { // your query setup goes here });
Как сказал выше seanizer, Apache StringUtils является фантастическим для этого, если вы должны были включить guava, вы должны сделать следующее;
public List<Employee> findEmployees(String str, int dep) { Preconditions.checkState(StringUtils.isNotBlank(str), "Invalid input, input is blank or null"); /** code here **/ }могу ли я также рекомендовать вам ссылаться на столбцы в вашем результирующем наборе по имени, а не по индексу, это сделает ваш код намного проще в обслуживании.
тест равен с пустой строкой и null в том же условном:
if(!"".equals(str) && str != null) { // do stuff. }не бросает
NullPointerExceptionесли str равно null, так какObject.equals()возвращает false, если argnull.другое строительство
str.equals("")бросил бы страшныйNullPointerException. Некоторые могут считать плохой формой использование строкового литерала в качестве объекта на wichequals()называется, но он делает свою работу.также проверьте этот ответ: https://stackoverflow.com/a/531825/1532705
Я сделал свою собственную функцию полезности, чтобы проверить несколько строк сразу, а не иметь оператор if, полный
if(str != null && !str.isEmpty && str2 != null && !str2.isEmpty). Это функция:public class StringUtils{ public static boolean areSet(String... strings) { for(String s : strings) if(s == null || s.isEmpty) return false; return true; } }Так что я могу просто написать:
if(!StringUtils.areSet(firstName,lastName,address) { //do something }
простое решение :
private boolean stringNotEmptyOrNull(String st) { return st != null && !st.isEmpty(); }
возвращает true или false на основе ввода
Predicate<String> p = (s)-> ( s != null && !s.isEmpty()); p.test(string);
есть новый метод в java-11:
String#isBlankвозвращает true, если строка пуста или содержит только пробелы кодовых точек, в противном случае false.
jshell> "".isBlank() ==> true jshell> " ".isBlank() ==> true jshell> " ! ".isBlank() ==> falseэто может быть объединено с
Optionalчтобы проверить, является ли строка пустой или пустойboolean isNullOrEmpty = Optional.ofNullable(str).map(String::isBlank).orElse(true);
вы можете использовать StringUtils.пустой(), то результат true, если строка имеет значение null или пустой.
String str1 = ""; String str2 = null; if(StringUtils.isEmpty(str)){ System.out.println("str1 is null or empty"); } if(StringUtils.isEmpty(str2)){ System.out.println("str2 is null or empty"); }в результате
str1 равно null или пусто
str2 равно null или пусто
Я бы посоветовал Guava или Apache Commons В соответствии с вашими фактическими потребностями. Проверьте различные варианты поведения в моем примере кода:
import com.google.common.base.Strings; import org.apache.commons.lang.StringUtils; /** * Created by hu0983 on 2016.01.13.. */ public class StringNotEmptyTesting { public static void main(String[] args){ String a = " "; String b = ""; String c=null; System.out.println("Apache:"); if(!StringUtils.isNotBlank(a)){ System.out.println(" a is blank"); } if(!StringUtils.isNotBlank(b)){ System.out.println(" b is blank"); } if(!StringUtils.isNotBlank(c)){ System.out.println(" c is blank"); } System.out.println("Google:"); if(Strings.isNullOrEmpty(Strings.emptyToNull(a))){ System.out.println(" a is NullOrEmpty"); } if(Strings.isNullOrEmpty(b)){ System.out.println(" b is NullOrEmpty"); } if(Strings.isNullOrEmpty(c)){ System.out.println(" c is NullOrEmpty"); } } }результат:
Apache:
в пустой
b-пустое
c-пустое
Google:
b является NullOrEmpty
c является NullOrEmpty
если вы используете Java 8 и хотите иметь более функциональный подход к программированию, вы можете определить
Function, управляющего управления, а затем вы можете использовать его иapply()всякий раз, когда это необходимо.приходя на практику, вы можете определить
FunctionкакFunction<String, Boolean> isNotEmpty = s -> s != null && !"".equals(s)затем, вы можете использовать его, просто назвав
apply()способ как:String emptyString = ""; isNotEmpty.apply(emptyString); // this will return false String notEmptyString = "StackOverflow"; isNotEmpty.apply(notEmptyString); // this will return trueесли вы предпочитаете, вы можете определить
Functionэто проверяет, еслиStringпусто, а затем отрицать его с!.в этом случае
Functionбудет выглядеть как :Function<String, Boolean> isEmpty = s -> s == null || "".equals(s)затем, вы можете использовать его, просто назвав
apply()способ как:String emptyString = ""; !isEmpty.apply(emptyString); // this will return false String notEmptyString = "StackOverflow"; !isEmpty.apply(notEmptyString); // this will return true
для полноты картины: Если вы уже с помощью Spring framework на StringUtils обеспечить метод
org.springframework.util.StringUtils.hasLength(String str)возвращает: true, если строка не равна null и имеет длину
а также метод
org.springframework.util.StringUtils.hasText(String str)возвращает: true если строка не является нулевой, ее длина больше 0 и она не содержит пробелов только
просто, чтобы игнорировать пробелы, а также:
if (str == null || str.trim().length() == 0) { // str is empty } else { // str is not empty }
Если вы используете Spring framework, то вы можете использовать метод:
org.springframework.util.StringUtils.isEmpty(@Nullable Object str);этот метод принимает объект в качестве аргумента, сравнивая его с null и пустую строку. Как следствие, этот метод никогда не вернет true для ненулевого объекта без строки.
С Java 8 Необязательно вы можете сделать:
public Boolean isStringCorrect(String str) { return Optional.ofNullable(str) .map(String::trim) .map(string -> !str.isEmpty()) .orElse(false); }в этом выражении, вы будете обрабатывать
Stringкоторые также состоят из пробелов.
лучший способ обработки null в строке,
str!=null && !str.equalsIgnoreCase("null") && !str.isEmpty()короче,
str.length()>0 && !str.equalsIgnoreCase("null")
Comments