Как проверить строку на null в java?

Как я могу проверить строку против null в java? Я использую

stringname.equalsignorecase(null)

но он не работает.

Ответ 1

string == null сравнивается, если объект имеет значение null. string.equals("foo") сравнивает значение внутри этого объекта. string == "foo" не всегда работает, потому что вы пытаетесь определить, совпадают ли объекты, а не значения, которые они представляют.


Более длинный ответ:

Если вы попробуете это, это не сработает, как вы нашли:

String foo = null;
if (foo.equals(null)) {
    // That fails every time. 
}

Причина в том, что foo имеет значение null, поэтому он не знает, что такое .equals; там нет объекта для .equals, который вызывается из.

Вероятно, вы хотели:

String foo = null;
if (foo == null) {
    // That will work.
}

Типичный способ защитить себя от null при работе со строками:

String foo = null;
String bar = "Some string";
...
if (foo != null && foo.equals(bar)) {
    // Do something here.
}

Таким образом, если foo был null, он не оценивает вторую половину условного выражения, и все в порядке.

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

String foo = null;
...
if ("some String".equals(foo)) {
    // Do something here.
}

Если вы хотите обойти это, у Apache Commons есть класс - StringUtils - который обеспечивает нулевые операции String.

if (StringUtils.equals(foo, bar)) {
    // Do something here.
}

Другой ответ был шуток и сказал, что вы должны это сделать:

boolean isNull = false;
try {
    stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
    isNull = true;
}

Пожалуйста, не делай этого. Вы должны делать исключения только для исключительных ошибок; если вы ожидаете нулевое значение, вы должны проверить его заранее, и не позволяйте этому генерировать исключение.

В моей голове есть две причины. Во-первых, исключения медленны; проверка на null выполняется быстро, но когда JVM генерирует исключение, требуется много времени. Во-вторых, код намного легче читать и поддерживать, если вы просто проверяете нулевой указатель раньше времени.

Ответ 2

s == null

не будет работать?

Ответ 3

Конечно, это работает. Вам не хватает важной части кода. Вам просто нужно сделать так:

boolean isNull = false;
try {
    stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
    isNull = true;
}

;)

Ответ 4

Использовать метод TextUtils.

TextUtils.isEmpty(str): возвращает значение true, если строка имеет значение null или 0. Параметры: str для проверки строки Возвращает: true, если str имеет нулевую или нулевую длину

  if(TextUtils.isEmpty(str)) {
        // str is null or lenght is 0
    }

Ниже исходный код этого метода

 /**
     * Returns true if the string is null or 0-length.
     * @param str the string to be examined
     * @return true if str is null or zero length
     */
    public static boolean isEmpty(CharSequence str) {
        if (str == null || str.length() == 0)
            return true;
        else
            return false;
    }

Ответ 5

Если мы рассмотрим реализацию метода equalsIgnoreCase, мы найдем эту часть:

if (string == null || count != string.count) {
    return false;
}

Поэтому он всегда будет возвращать false, если аргумент null. И это, очевидно, правильно, потому что единственный случай, когда он должен возвращать true, - это когда equalsIgnoreCase вызывается на null String, но

String nullString = null;
nullString.equalsIgnoreCase(null);

безусловно, приведет к исключению NullPointerException.

Методы so equals не предназначены для проверки того, является ли объект нулевым, только потому, что вы не можете вызвать их на null.

Ответ 6

Это выглядит немного странно, но...

stringName == null || "".equals(stringName)

Никогда не возникало никаких проблем, связанных с этим, плюс его более безопасный способ проверки, избегая возможных исключений с нулевой точкой.

Ответ 7

Я не уверен, что случилось с ответом MYYN.

if (yourString != null) {
  //do fun stuff with yourString here
}

Вышеупомянутая нулевая проверка - это все в порядке.

Если вы пытаетесь проверить, равна ли ссылка String (игнорируя регистр) другой строке, которая, как вы знаете, не является нулевой ссылкой, выполните следующие действия:

String x = "this is not a null reference"
if (x.equalsIgnoreCase(yourStringReferenceThatMightBeNull) ) {
  //do fun stuff
}

Если есть какие-либо сомнения относительно того, имеете ли вы нулевые ссылки для обеих строк, которые вы сравниваете, вам нужно будет проверить нулевую ссылку хотя бы на одну из них, чтобы избежать возможности исключения NullPointerException.

Ответ 8

Если ваша строка имеет значение "null", вы можете использовать

if(null == stringName){

  [code]

}

else

[Error Msg]

Ответ 9

Вы можете проверить с помощью String == null

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

    String foo = null;
    if(foo == null){
        System.out.println("String is null");
    }

Ответ 10

Конечно, user351809, stringname.equalsignorecase(null) выдаст исключение NullPointerException.
Смотрите, у вас есть строковый объект stringname, который следует за двумя возможными условиями: -

  • stringname имеет некоторое непустое строковое значение (скажем, "компьютер" ):
    Ваш код будет работать нормально, так как он принимает форму
    "computer".equalsignorecase(null)
    и вы получите ожидаемый ответ как false.
  • stringname имеет значение null:
    Здесь ваш код застрянет, так как null.equalsignorecase(null)
    Тем не менее, кажется хорошим на первый взгляд, и вы можете надеяться на ответ как true,
    но null не является объектом, который может выполнить метод equalsignorecase().

Следовательно, вы получаете исключение из-за случая 2.
Я предлагаю вам просто использовать stringname == null

Ответ 11

Простой метод:

public static boolean isBlank(String value) {
    return (value == null || value.equals("") || value.equals("null") || value.trim().equals(""));
}

Ответ 12

Если возвращаемое значение value равно null, используйте:

if(value.isEmpty());

Когда-нибудь, чтобы проверить null, if(value == null) в java, он может не дать true, даже если String имеет значение null.

Ответ 13

Я понимаю, что это было ответино давно, но я не видел, чтобы это было опубликовано, поэтому я подумал, что поделюсь тем, что делаю. Это не особенно хорошо подходит для чтения кода, но если вам нужно выполнить ряд нулевых проверок, мне нравится использовать:

String someString = someObject.getProperty() == null ? "" : someObject.getProperty().trim();

В этом примере вызывается обрезка в строке, которая будет вызывать NPE, если строка была нулевой или пробельной, но в той же строке вы можете проверить нулевое или пустое значение, так что вы не получите тонну из (более) трудно форматировать, если блоки.

Ответ 14

импортировать его в свой класс

import org.apache.commons.lang.StringUtils;

то используйте его, оба они вернут true

System.out.println(StringUtils.isEmpty(""));
System.out.println(StringUtils.isEmpty(null)); 

Ответ 15

Ну, в последний раз, когда кто-то спросил этот глупый вопрос, ответ был:

someString.equals("null")

Это "исправление" только скрывает большую проблему того, как null становится "null", в первую очередь.

Ответ 16

Есть два способа сделать это:.Say String == null или string.equals()..

public class IfElse {

    public int ifElseTesting(String a){
        //return null;
        return (a== null)? 0: a.length();
    }

}

public class ShortCutifElseTesting {

    public static void main(String[] args) {

        Scanner scanner=new Scanner(System.in);
        System.out.println("enter the string please:");
        String a=scanner.nextLine();
        /*
        if (a.equals(null)){
            System.out.println("you are not correct");
        }
        else if(a.equals("bangladesh")){
            System.out.println("you are right");
        }
        else
            System.out.println("succesful tested");

        */
        IfElse ie=new IfElse();
        int result=ie.ifElseTesting(a);
        System.out.println(result);

    }

}

Проверьте этот пример. Вот еще один пример ярлыка If If Else..