Как проверить, не является ли строка пустой и не пустой?
public void doStuff(String str)
{
if (str != null && str != "**here I want to check the 'str' is empty or not**")
{
/* handle empty string */
}
/* ... */
}
Как проверить, не является ли строка пустой и не пустой?
public void doStuff(String str)
{
if (str != null && str != "**here I want to check the 'str' is empty or not**")
{
/* handle empty string */
}
/* ... */
}
Что насчет isEmpty()?
if(str != null && !str.isEmpty())
Обязательно используйте части && в этом порядке, потому что java не будет продолжать оценивать вторую часть, если первая часть && не удалась, таким образом гарантируя, что вы не получите исключение нулевого указателя от str.isEmpty() если str равно null,
Осторожно, он доступен только с 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 ) )
Мне нравится использовать Apache commons-lang для таких вещей, и особенно StringUtils служебный класс:
import org.apache.commons.lang.StringUtils;
if (StringUtils.isNotBlank(str)) {
...
}
if (StringUtils.isBlank(str)) {
...
}
Просто добавьте Android здесь:
import android.text.TextUtils;
if (!TextUtils.isEmpty(str)) {
...
}
Чтобы добавить к @BJorn и @SeanPatrickFloyd. Способ Guava для этого:
Strings.nullToEmpty(str).isEmpty();
// or
Strings.isNullOrEmpty(str);
Commons Lang более читаем время от времени, но я медленно полагался больше на Guava плюс иногда Commons Lang путается, когда дело доходит до isBlank() (как в том, что пробегает или нет).
Версия Guava 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 не выполняет вторую проверку, если первая ложна)!
ВАЖНО: НЕ используйте == для равенства строк. == проверяет, что указатель равен, а не значение. Две строки могут быть в разных адресах памяти (два экземпляра), но имеют одинаковое значение!
Почти каждая библиотека, которую я знаю, определяет служебный класс с именем StringUtils, StringUtil или StringHelper, и они обычно включают в себя метод, который вы ищете.
Мой личный фаворит - Apache Commons/Lang, где в классе StringUtils вы получаете оба
(Первая проверяет, является ли строка пустой или пустой, вторая проверяет, является ли она пустой, пустой или только пробелом)
В Spring, Wicket и многих других библиотеках есть похожие служебные классы. Если вы не используете внешние библиотеки, вы можете захотеть ввести класс StringUtils в свой собственный проект.
Обновление: прошло много лет, и в эти дни я бы рекомендовал использовать метод Guava Strings.isNullOrEmpty(string).
Это работает для меня:
import com.google.common.base.Strings;
if (!Strings.isNullOrEmpty(myString)) {
return myString;
}
Возвращает true, если заданная строка равна null или является пустой строкой.
Рассмотрим нормализацию ссылок на строку с помощью nullToEmpty. если ты do, вы можете использовать String.isEmpty() вместо этого метода, и вы не будете нужны специальные нуль-безопасные формы таких методов, как String.toUpperCase или. Или, если вы хотите нормализовать "в другом направлении", преобразование пустых строк в нуль, вы можете использовать emptyToNull.
Как насчет:
if(str!= null && str.length() != 0 )
Использовать метод isNotBlank Apache StringUtils, например
StringUtils.isNotBlank(str)
Он вернет true, только если str не является нулевым и не пуст.
Вы должны использовать org.apache.commons.lang3.StringUtils.isNotBlank() или org.apache.commons.lang3.StringUtils.isNotEmpty. Решение между этими двумя основано на том, что вы действительно хотите проверить.
Функция isNotBlank() проверяет, что входной параметр:
Функция isNotEmpty() проверяет только, что входной параметр
Мне стало скучно, у меня есть бесплатный рефакторинг. Это немного чище, но не первозданно.
public class ALittleCleaner {
public List<Employee> findEmployees(String str, int dep) throws ClassNotFoundException, SQLException {
log("List IN");
List<Employee> list = Lists.newArrayList();
Connection con = getConnection();
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
String qry = buildQueryString(str, dep);
log(qry);
ResultSet rs = stmt.executeQuery(qry);
parseResults(list, rs);
log("List Out");
return list;
}
private void parseResults(List<Employee> list, ResultSet rs) throws SQLException {
while (rs.next()) {
Employee employee = new Employee();
String name = rs.getString(2);
employee.setName(name);
int id = rs.getInt(1);
employee.setId(id);
int dept = rs.getInt(4);
employee.setDept(dept);
int age = rs.getInt(3);
employee.setAge(age);
list.add(employee);
}
}
private String buildQueryString(String str, int dep) {
String qry = "SELECT * FROM PERSON ";
StringBuilder sb = new StringBuilder();
if (StringUtils.isNotBlank(str)) {
sb.append("WHERE NAME LIKE '%").append(str).append("%'");
log(qry);
}
if (dep != 0) {
if (sb.toString().length() > 0) {
sb.append(" AND ");
} else {
sb.append("WHERE ");
}
sb.append("dept=").append(dep);
}
qry += sb.append(";").toString();
return qry;
}
private Connection getConnection() throws SQLException, ClassNotFoundException {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/general";
java.sql.Connection con = DriverManager.getConnection(url, "root", "1234");
log("URL: " + url);
log("Connection: " + con);
return con;
}
private void log(String out) {
// Replace me with a real logger
System.out.println(out);
}
class Employee implements Serializable {
private static final long serialVersionUID = -8857510821322850260L;
String name;
int id, dept, age;
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
public int getDept() {
return this.dept;
}
public void setDept(int dept) {
this.dept = dept;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
}
}
Если вы не хотите включать всю библиотеку; просто укажите код, который вы хотите от него. Вы должны будете поддерживать это самостоятельно; но это довольно прямая функция. Здесь он копируется из 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;
}
Слишком поздно, но вот функциональный стиль проверки:
Optional.ofNullable(str)
.filter(s -> !(s.trim().isEmpty()))
.ifPresent(result -> {
// your query setup goes here
});
Возвращает true или false на основе ввода
Predicate<String> p = (s)-> ( s != null && !s.isEmpty());
p.test(string);
Если вам известна строка, которую вы хотите проверить, вы можете использовать следующие
if (!"mystring".equals(str)) {
/* your code here */
}
В java-11 есть новый метод: String#isBlank
Возвращает true, если строка пуста или содержит только пробелы, иначе false.
jshell> "".isBlank()
$7 ==> true
jshell> " ".isBlank()
$8 ==> true
jshell> " ! ".isBlank()
$9 ==> false
Это может быть объединено с Optional чтобы проверить, является ли строка пустой или пустой
boolean isNullOrEmpty = Optional.ofNullable(str).map(String::isBlank).orElse(true);
test равен пустой строке и null в том же условии:
if(!"".equals(str) && str != null) {
// do stuff.
}
Не выбрасывает NullPointerException, если str равно null, так как Object.equals() возвращает false, если arg null.
другой конструктор str.equals("") выкинет ужасный NullPointerException. Некоторые могут рассматривать плохую форму, используя строковый литерал, поскольку объект, на который вызывается equals(), но выполняет эту работу.
Также проверьте этот ответ: fooobar.com/questions/18129/...
Простое решение:
private boolean stringNotEmptyOrNull(String st) {
return st != null && !st.isEmpty();
}
Как сказал 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 **/
}
Могу ли я также рекомендовать, чтобы вы ссылались на столбцы в результирующем наборе по имени, а не по индексу, это упростит ваш код.
Я сделал свою собственную функцию утилиты для проверки нескольких строк сразу, вместо того, чтобы иметь оператор 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
}
Просто небольшая хорошая практика, если не просто синтаксический сахар (поместите константу перед == и !=).
if(null != str && !str.isEmpty())
Вы можете использовать StringUtils.isEmpty(), это приведет к истине, если строка является пустой или пустой.
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 пустой или пустой
str2 является нулевым или пустым
Я бы посоветовал 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:
a пустое
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
С Java 8 дополнительно вы можете сделать:
public Boolean isStringCorrect(String str) {
return Optional.ofNullable(str)
.map(String::trim)
.map(string -> !str.isEmpty())
.orElse(false);
}
В этом выражении вы также будете обрабатывать String, состоящую из пробелов.
Если вы используете Spring Boot, то нижеприведенный код сделает работу
StringUtils.hasLength(str)
Для полноты: если вы уже используете фреймворк Spring, StringUtils предоставляют метод
org.springframework.util.StringUtils.hasLength(String str)
Возвращает: true, если строка не равна null и имеет длину
, а также метод
org.springframework.util.StringUtils.hasText(String str)
Возвращает: true, если строка не равна NULL, ее длина больше 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);
Этот метод принимает любой объект в качестве аргумента, сравнивая его с нулем и пустой строкой. Как следствие, этот метод никогда не вернет true для ненулевого объекта, отличного от String.
Лучший способ обработки нулевого значения в строке -
str!=null && !str.equalsIgnoreCase("null") && !str.isEmpty()
Вкратце,
str.length()>0 && !str.equalsIgnoreCase("null")