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

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

public void doStuff(String str)
{
    if (str != null && str != "**here I want to check the 'str' is empty or not**")
    {
        /* handle empty string */
    }
    /* ... */
}

Ответ 1

Что насчет 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 ) )

Ответ 2

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

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

import org.apache.commons.lang.StringUtils;

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

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

Ответ 3

Просто добавьте Android здесь:

import android.text.TextUtils;

if (!TextUtils.isEmpty(str)) {
...
}

Ответ 4

Чтобы добавить к @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 странно о '').

Ответ 5

str != null && str.length() != 0

в качестве альтернативы

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

или

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

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

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

Ответ 6

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

Мой личный фаворит - Apache Commons/Lang, где в классе StringUtils вы получаете оба

  1. StringUtils.isEmpty(String) и
  2. Метод StringUtils.isBlank(String)

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

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


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

Ответ 7

Это работает для меня:

import com.google.common.base.Strings;

if (!Strings.isNullOrEmpty(myString)) {
       return myString;
}

Возвращает true, если заданная строка равна null или является пустой строкой.

Рассмотрим нормализацию ссылок на строку с помощью nullToEmpty. если ты do, вы можете использовать String.isEmpty() вместо этого метода, и вы не будете нужны специальные нуль-безопасные формы таких методов, как String.toUpperCase или. Или, если вы хотите нормализовать "в другом направлении", преобразование пустых строк в нуль, вы можете использовать emptyToNull.

Ответ 8

Как насчет:

if(str!= null && str.length() != 0 )

Ответ 9

Использовать метод isNotBlank Apache StringUtils, например

StringUtils.isNotBlank(str)

Он вернет true, только если str не является нулевым и не пуст.

Ответ 10

Вы должны использовать org.apache.commons.lang3.StringUtils.isNotBlank() или org.apache.commons.lang3.StringUtils.isNotEmpty. Решение между этими двумя основано на том, что вы действительно хотите проверить.

Функция isNotBlank() проверяет, что входной параметр:

  • не ноль,
  • а не пустая строка ("")
  • не последовательность символов пробела ("")

Функция isNotEmpty() проверяет только, что входной параметр

  • не ноль
  • не пустая строка ("")

Ответ 11

Мне стало скучно, у меня есть бесплатный рефакторинг. Это немного чище, но не первозданно.

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;
    }
}

}

Ответ 12

Если вы не хотите включать всю библиотеку; просто укажите код, который вы хотите от него. Вы должны будете поддерживать это самостоятельно; но это довольно прямая функция. Здесь он копируется из 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;
}

Ответ 13

Слишком поздно, но вот функциональный стиль проверки:

Optional.ofNullable(str)
    .filter(s -> !(s.trim().isEmpty()))
    .ifPresent(result -> {
       // your query setup goes here
    });

Ответ 14

Возвращает true или false на основе ввода

Predicate<String> p = (s)-> ( s != null && !s.isEmpty());
p.test(string);

Ответ 15

Если вам известна строка, которую вы хотите проверить, вы можете использовать следующие

if (!"mystring".equals(str)) { 
    /* your code here */ 
}

Ответ 16

В есть новый метод: 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);

Строка # ISBLANK

Ответ 17

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/...

Ответ 18

Простое решение:

private boolean stringNotEmptyOrNull(String st) {
    return st != null && !st.isEmpty();
}

Ответ 19

Как сказал 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 **/
}

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

Ответ 20

Я сделал свою собственную функцию утилиты для проверки нескольких строк сразу, вместо того, чтобы иметь оператор 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
}

Ответ 21

Просто небольшая хорошая практика, если не просто синтаксический сахар (поместите константу перед == и !=).

if(null != str && !str.isEmpty())

Ответ 22

Вы можете использовать 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 является нулевым или пустым

Ответ 23

Я бы посоветовал 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

Ответ 24

Если вы используете 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

Ответ 25

С Java 8 дополнительно вы можете сделать:

public Boolean isStringCorrect(String str) {
    return Optional.ofNullable(str)
            .map(String::trim)
            .map(string -> !str.isEmpty())
            .orElse(false);
}

В этом выражении вы также будете обрабатывать String, состоящую из пробелов.

Ответ 26

Если вы используете Spring Boot, то нижеприведенный код сделает работу

StringUtils.hasLength(str)

Ответ 27

Для полноты: если вы уже используете фреймворк Spring, StringUtils предоставляют метод

org.springframework.util.StringUtils.hasLength(String str)

Возвращает: true, если строка не равна null и имеет длину

, а также метод

org.springframework.util.StringUtils.hasText(String str)

Возвращает: true, если строка не равна NULL, ее длина больше 0 и она не содержит только пробелы

Ответ 28

Просто, чтобы игнорировать и пробел:

if (str == null || str.trim().length() == 0) {
    // str is empty
} else {
    // str is not empty
}

Ответ 29

Если вы используете Spring framework, вы можете использовать метод:

org.springframework.util.StringUtils.isEmpty(@Nullable Object str);

Этот метод принимает любой объект в качестве аргумента, сравнивая его с нулем и пустой строкой. Как следствие, этот метод никогда не вернет true для ненулевого объекта, отличного от String.

Ответ 30

Лучший способ обработки нулевого значения в строке -

str!=null && !str.equalsIgnoreCase("null") && !str.isEmpty()

Вкратце,

str.length()>0 && !str.equalsIgnoreCase("null")