it-swarm.com.ru

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

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

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

Как насчет isEmpty () ?

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

Обязательно используйте части && в этом порядке, потому что Java не будет продолжать оценивать вторую часть, если первая часть && терпит неудачу, таким образом гарантируя, что вы не получите исключение нулевого указателя из str.isEmpty(), если str равен нулю.

Осторожно, он доступен только с Java SE 1.6. Вы должны проверить str.length() == 0 в предыдущих версиях.


Чтобы игнорировать пробелы, а также:

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

(поскольку Java 11 str.trim().isEmpty() может быть уменьшена до str.isBlank(), которая также будет проверять другие пробелы в Юникоде)

Завернут в удобную функцию:

public static boolean empty( final String s ) {
  // Null-safe, short-circuit evaluation.
  return s == null || s.trim().isEmpty();
}

Становится:

if( !empty( str ) )
838
Colin Hebert

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

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

import org.Apache.commons.lang.StringUtils;

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

if (StringUtils.isBlank(str)) {
    ...
} 
193
Romain Linsolas

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

import Android.text.TextUtils;

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

Чтобы добавить к @BJorn и @SeanPatrickFloyd Guava способ сделать это: 

Strings.nullToEmpty(str).isEmpty(); 
// or
Strings.isNullOrEmpty(str);

Commons Lang иногда более читабелен, но я постепенно больше полагаюсь на Guava, а иногда Commons Lang сбивает с толку, когда речь заходит о isBlank() (например, о том, что такое пробел или нет).

Версия Commons Lang isBlank от Guava будет выглядеть так:

Strings.nullToEmpty(str).trim().isEmpty()

Я скажу, что код, который не позволяет "" (пусто)Иnull, является подозрительным и потенциально ошибочным в том смысле, что он, вероятно, не обрабатывает все случаи, когда не позволяет null имеет смысл (хотя для SQL я могу понять так как SQL/HQL странный из-за '').

42
Adam Gent
str != null && str.length() != 0

альтернативно

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

или же

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

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

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

33
helios

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

import com.google.common.base.Strings;

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

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

Попробуйте нормализовать ваши строковые ссылки с помощью nullToEmpty. Если ты делать, вы можете использовать String.isEmpty () вместо этого метода, и вы не будете нужны специальные нулевые безопасные формы методов, такие как String.toUpperCase или. Или, если вы хотите нормализовать «в другом направлении» преобразовывая пустые строки в нуль, вы можете использовать emptyToNull.

24
Javatar

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

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

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

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

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


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

23
Sean Patrick Floyd

Как насчет:

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

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

StringUtils.isNotBlank(str)

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

7
A Null Pointer

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

isNotBlank () проверяет, что входной параметр: 

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

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

  • ненулевой
  • не пустая строка ("")
6
gprasant

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

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

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

Возвращает истину или ложь на основе ввода

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

Существует новый метод в 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);

Строка # isBlank

4
Anton Balaniuc

test равен пустой строке и null в том же условном выражении:

if(!"".equals(str) && str != null) {
    // do stuff.
}

Не генерирует NullPointerException, если str равен нулю, так как Object.equals() возвращает false, если arg равен null.

другая конструкция str.equals("") выбросила бы страшную NullPointerException. Некоторые могут считать, что использование строкового литерала в качестве объекта при вызове equals() является плохим, но оно выполняет свою работу. 

Также проверьте этот ответ: https://stackoverflow.com/a/531825/1532705

3
Mindwin

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

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

Как сказал выше seanizer, Apache StringUtils отлично подходит для этого, если вы включите гуаву, вы должны сделать следующее;

public List<Employee> findEmployees(String str, int dep) {
 Preconditions.checkState(StringUtils.isNotBlank(str), "Invalid input, input is blank or null");
 /** code here **/
}

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

2
BjornS

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

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

Вы можете использовать StringUtils.isEmpty (), он будет иметь значение true, если строка пуста или пуста.

 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 является нулевым или пустым

1
Vivek Vermani

Я бы посоветовал 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:
А пусто
б пусто
с пустым
. .__ Google:
b является NullOrEmpty
c является NullOrEmpty

1
BlondCode

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

StringUtils.hasLength(str)
1
Avinash

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

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

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

а также метод

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

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

0
l00tr

Проверить, все ли строковые атрибуты в объекте пусты (вместо использования! = Null для всех имен полей в соответствии с подходом API Java-отражения) 

private String name1;
private String name2;
private String name3;

public boolean isEmpty()  {

    for (Field field : this.getClass().getDeclaredFields()) {
        try {
            field.setAccessible(true);
            if (field.get(this) != null) {
                return false;
            }
        } catch (Exception e) {
            System.out.println("Exception occurred in processing");
        }
    }
    return true;
}

Этот метод возвратил бы true, если все значения поля String являются пустыми, Он возвратил бы false, если в атрибутах String присутствует какое-либо одно значение 

0
Lokeshkumar R

Лучший способ обработать нуль в строке:

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

Короче,

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

Просто игнорировать также и пробел:

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

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

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

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

0
Taras Melnyk

Я столкнулся с ситуацией, когда я должен проверить, что "ноль" (как строка) должен рассматриваться как пустой. Также пробел и фактическое null должны возвращать true. Я наконец остановился на следующей функции ...

public boolean isEmpty(String testString) {
  return ((null==testString) || "".equals((""+testString).trim()) || "null".equals((""+testString).toLowerCase()));
}
0
Dave

С Java 8 Необязательно вы можете сделать:

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

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

0
Stas