如何在java中检查字符串中的null?

时间:2010-05-27 11:11:24

标签: java string null

如何在java中检查字符串中的null?我正在使用

stringname.equalsignorecase(null)

但它不起作用。

19 个答案:

答案 0 :(得分:153)

string == 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,你应该提前检查它,而不是让它抛出异常。

在我看来,有两个原因。首先,例外情况很慢;检查null很快,但是当JVM抛出异常时,需要花费很多时间。其次,如果你提前检查空指针,代码就更容易阅读和维护。

答案 1 :(得分:28)

s == null

不起作用?

答案 2 :(得分:18)

确实有效。你错过了代码的重要部分。你只需要这样做:

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

答案 3 :(得分:9)

使用TextUtils方法。

TextUtils.isEmpty(str):如果字符串为null或0-length,则返回true。 参数: str要检查的字符串 返回: 如果str为null或零长度,则为true

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

以下是此方法的source code

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

答案 4 :(得分:5)

如果我们看一下equalsIgnoreCase方法的实现,我们会发现这个部分:

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

如果参数为false,它将始终返回null。这显然是正确的,因为它应该返回true的唯一情况是在null String上调用equalsIgnoreCase时,但是

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

肯定会导致NullPointerException。

所以equals方法不是为了测试对象是否为null而设计的,只是因为你无法在null上调用它们。

答案 5 :(得分:4)

这看起来有点奇怪,但是......

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

从来没有任何问题这样做,加上它是一种更安全的检查方式,同时避免潜在的零点异常。

答案 6 :(得分:3)

我不确定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。

答案 7 :(得分:2)

如果您的字符串具有“null”值,则可以使用

if(null == stringName){

  [code]

}

else

[Error Msg]

答案 8 :(得分:2)

您可以使用String == null

进行检查

这对我有用

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

答案 9 :(得分:2)

在您的课程中导入

import org.apache.commons.lang.StringUtils;

然后使用它,它们都将返回真实

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

答案 10 :(得分:1)

当然user351809,stringname.equalsignorecase(null)将抛出NullPointerException 请参阅,您有一个字符串对象stringname,它遵循两个可能的条件: -

  1. stringname有一些非空字符串值(比如“计算机”):
    您的代码可以正常工作,因为它采用形式
    "computer".equalsignorecase(null)
    并且您得到的预期回复为false
  2. stringname的值为null
    在这里你的代码将被卡住,如同 null.equalsignorecase(null)
    但是,初看起来似乎很好,你可能希望回复为true
    但是,null不是可以执行equalsignorecase()方法的对象。
  3. 因此,由于案例2,你得到例外。
    我建议你只使用stringname == null

答案 11 :(得分:1)

如果返回的value为null,请使用:

if(value.isEmpty());

有时在java中检查null,if(value == null),即使String为null也可能不会为true。

答案 12 :(得分:1)

简单方法:

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

答案 13 :(得分:0)

我意识到很久以前就已经回答了这个问题,但是我没有看到这个问题,所以我想我会分享我的所作所为。这对代码可读性不是特别好,但是如果你不得不做一系列的空检查,我喜欢使用:

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

在这个例子中,对字符串调用trim,如果字符串为null或空格则会抛出NPE,但是在同一行上,你可以检查null或空白,这样你就不会得到一个吨(更多)难以格式化块。

答案 14 :(得分:0)

使用Java 7,您可以使用

if (Objects.equals(foo, null)) {
    ...
}

如果两个参数均为true,它将返回null

答案 15 :(得分:0)

如果我理解正确,应该这样做:

if(!stringname.isEmpty())
// an if to check if stringname is not null
if(stringname.isEmpty())
// an if to check if stringname is null

答案 16 :(得分:0)

Apache StringUtils 类将为您完成此操作。 StringUtils.equals(col1, col2) 当 col1、col2 或两者都为 null 时正常工作。

考虑阅读整个 StringUtils JavaDoc 页面。 它已经解决了大部分(如果不是全部)字符串操作和/或比较 您会遇到的问题。

答案 17 :(得分:-2)

有两种方法可以做到。使用 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 Else的快捷版本的另一个示例..

答案 18 :(得分:-2)

好吧,上次有人问这个愚蠢的问题时,答案是:

someString.equals("null")

这个“修复”只隐藏了null首先成为"null"的更大问题。