Как проверить, равна ли моя строка нулю? - PullRequest
157 голосов
/ 08 апреля 2010

Я хочу выполнить какое-то действие ТОЛЬКО ЕСЛИ моя строка имеет значимое значение. Итак, я попробовал это.

if (!myString.equals("")) {
doSomething
}

и это

if (!myString.equals(null)) {
doSomething
}

и это

if ( (!myString.equals("")) && (!myString.equals(null))) {
doSomething
}

и это

if ( (!myString.equals("")) && (myString!=null)) {
doSomething
}

и это

if ( myString.length()>0) {
doSomething
}

И во всех случаях моя программа doSomething, несмотря на то, что моя строка пуста. Это равно null. Так что же с этим не так?

ДОБАВЛЕНО:

Я нашел причину проблемы. Переменная была объявлена ​​как строка, и, как следствие, null, присвоенный этой переменной, был преобразован в "null"! Итак, if (!myString.equals("null")) работает.

Ответы [ 26 ]

219 голосов
/ 08 апреля 2010
if (myString != null && !myString.isEmpty()) {
  // doSomething
}

В качестве дальнейшего комментария вы должны знать об этом термине в equals контракте:

С Object.equals(Object):

Для любого ненулевого опорного значения x x.equals(null) должна return false.

Способ сравнения с null заключается в использовании x == null и x != null.

Более того, x.field и x.method() бросает NullPointerException, если x == null.

26 голосов
/ 08 апреля 2010

Если myString равен null, то при вызове myString.equals(null) или myString.equals("") произойдет сбой с NullPointerException. Вы не можете вызывать какие-либо методы экземпляра для пустой переменной.

Сначала проверьте наличие нуля, как это:

if (myString != null && !myString.equals("")) {
    //do something
}

Используется оценка короткого замыкания , чтобы не пытаться .equals, если myString не проходит проверку нуля.

18 голосов
/ 09 сентября 2013

Apache commons StringUtils.isNotEmpty - лучший путь.

10 голосов
/ 20 ноября 2012

Если myString на самом деле имеет значение null, то любой вызов ссылки не будет выполнен с исключением из-за нулевого указателя (NPE). Начиная с Java 6, используйте #isEmpty вместо проверки длины (в любом случае НИКОГДА не создавайте новую пустую строку с проверкой).

if (myString !=null &&  !myString.isEmpty()){
    doSomething();
}

Между прочим, если сравнивать со строковыми литералами, как вы, произойдет обратное утверждение, чтобы не иметь нулевой проверки, т. Е.

if (("some string to check").equals(myString)){
  doSomething();
} 

вместо:

if (myString !=null &&  !myString.equals("some string to check")){
    doSomething();
}
6 голосов
/ 02 сентября 2016

РАБОТАЕТ !!!!

if (myString != null && !myString.isEmpty()) {
    return true;
}
else {
    return false;
}
5 голосов
/ 08 апреля 2010

Вам нужно проверить, что myString объект null:

if (myString != null) {
    doSomething
}
5 голосов
/ 08 апреля 2010

Если ваша строка пуста, вызовы, подобные этому, должны генерировать исключение NullReferenceException:

myString.equals (нуль)

Но в любом случае, я думаю, что такой метод, как вы хотите:

public static class StringUtils
{
    public static bool isNullOrEmpty(String myString)
    {
         return myString == null || "".equals(myString);
    }
}

Затем в своем коде вы можете делать такие вещи:

if (!StringUtils.isNullOrEmpty(myString))
{
    doSomething();
}
4 голосов
/ 08 апреля 2010
 if (myString != null && myString.length() > 0) {

        // your magic here

 }

Кстати, если вы выполняете много манипуляций со строками, есть отличный класс Spring со всеми видами полезных методов:

http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/util/StringUtils.html

4 голосов
/ 08 апреля 2010

Попробуйте,

myString!=null && myString.length()>0
4 голосов
/ 10 мая 2012

Я бы рекомендовал использовать существующую утилиту или создать собственный метод:

public static boolean isEmpty(String string) {
    return string == null || string.length() == 0;
}

Тогда просто используйте его, когда вам это нужно:

if (! StringUtils.isEmpty(string)) {
  // do something
}

Как отмечено выше, || и && операторы короткого замыкания. Это означает, что как только они могут определить свою ценность, они останавливаются. Поэтому, если (string == null) имеет значение true, часть длины не нужно оценивать, так как выражение всегда будет истинным. Аналогично с &&, где, если левая сторона ложна, выражение всегда ложно и не требует дальнейшей оценки.

Как дополнительное примечание, использование длины обычно лучше, чем использование .equals. Производительность немного лучше (не очень) и не требует создания объектов (хотя большинство компиляторов могут оптимизировать это).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...