【问题标题】:How to check a string against null in java?如何在java中检查字符串是否为null?
【发布时间】:2010-05-27 11:11:23
【问题描述】:

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

stringname.equalsignorecase(null)

但它不起作用。

【问题讨论】:

  • 1. equalsignorecase - 如果传递的参数为空,则返回 false 2. 由于 stringname 是一个字符串对象,您可以简单地使用 stringname == null

标签: java string null


【解决方案1】:

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 - 提供空安全字符串操作。

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

另一个回应是开玩笑,说你应该这样做:

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

请不要那样做。你应该只为异常的错误抛出异常;如果你期待一个空值,你应该提前检查它,而不是让它抛出异常。

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

【讨论】:

  • 你错过了 Yoda 版本,每次也有效:if ("foo".equalsIgnoreCase(string))
  • 很好的解释。谢谢你玩得很好。
  • @aioobe 我想我们同意?如果您可以更清楚,很高兴编辑。
【解决方案2】:
s == null

不行吗?

【讨论】:

  • @k38:如果你想比较,你“只有”必须使用equals()。但是如果要检查变量是否为null,则使用==
【解决方案3】:

当然可以。您错过了代码的重要部分。你只需要这样做:

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

;)

【讨论】:

  • 如果你读到这里,请意识到@aioobe 是在开玩笑;你不应该这样做。
【解决方案4】:

如果你在 Android 中工作,请使用 TextUtils 方法。

TextUtils.isEmpty(str) :如果字符串为空或长度为 0,则返回 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;
    }

【讨论】:

    【解决方案5】:

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

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

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

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

    肯定会导致 NullPointerException。

    因此,equals 方法并非旨在测试对象是否为空,只是因为您无法在 null 上调用它们。

    【讨论】:

      【解决方案6】:

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

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

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

      【讨论】:

      • 当心 NullPointer 在这种情况下第二个条件应该是 first 。
      【解决方案7】:

      我不确定 The MYYN 的回答有什么问题。

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

      上面的空检查是完全可以的。

      如果您尝试检查一个字符串引用是否等于(忽略大小写)另一个您知道不是空引用的字符串,请执行以下操作:

      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]
        

        【讨论】:

        • 为什么 null == stringName 而不是 stringName == null ?我认为没有区别,但为什么这是首选(我已经看过很多了)。我的偏好是阅读 order LTR 所以 stringName == null 但想知道其他人的想法。
        • 通常相比之下,您将变量放在右侧,这样您就不会在错误时初始化变量:null = stringName 产生编译错误,而 stringName = null 是可能的
        • 这样做根本不“正常”,许多人明确禁止这样做,因为它对于阅读代码库的人来说不是自然可读的。
        【解决方案9】:

        在你的课堂上导入它

        import org.apache.commons.lang.StringUtils;
        

        然后使用它,它们都会返回true

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

        【讨论】:

          【解决方案10】:

          您可以使用 String == null 进行检查

          这对我有用

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

          【讨论】:

            【解决方案11】:

            当然 user351809、stringname.equalsignorecase(null) 会抛出 NullPointerException。
            看,你有一个字符串对象stringname,它遵循两个可能的条件:-

            1. stringname 有一个非空字符串值(比如“计算机”):
              您的代码可以正常工作,因为它采用格式
              "computer".equalsignorecase(null)
              你会得到false的预期响应。
            2. stringname 有一个 null 值:
              在这里你的代码会卡住,如
              null.equalsignorecase(null)
              但是,乍一看似乎不错,您可能希望回复为true
              但是,null 不是可以执行equalsignorecase() 方法的对象。

            因此,由于案例 2,您会遇到异常。
            我建议你简单地使用stringname == null

            【讨论】:

              【解决方案12】:

              简单方法:

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

              【讨论】:

                【解决方案13】:

                使用 Java 7,您可以使用

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

                如果两个参数都是null,则返回true

                【讨论】:

                  【解决方案14】:

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

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

                  【讨论】:

                    【解决方案15】:

                    我知道这是很久以前回答的,但我还没有看到这个帖子,所以我想我会分享我的工作。这对代码的可读性不是特别好,但是如果您必须进行一系列空值检查,我喜欢使用:

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

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

                    【讨论】:

                    • 检查 null 或空白是什么意思?您只在这里检查 null 。空白是“COND ? A : B;”的可能返回之一。构造,对吧?
                    【解决方案16】:

                    如果返回的value 为空,则使用:

                    if(value.isEmpty());
                    

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

                    【讨论】:

                    • 使用 Scala (with Java) if(value.isEmpty()) 给出NullPointerException。在这种情况下最好使用if(value == null)
                    • 这绝对是错误的,因为如果为空,它总是会抛出 NPE。
                    【解决方案17】:

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

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

                    【讨论】:

                      【解决方案18】:

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

                      someString.equals("null")
                      

                      不过,这个“修复”只是隐藏了更大的问题,即 null 首先如何变成 "null"

                      【讨论】:

                      • 它没有 - 所以这不是一个修复,也不是一个有用的答案。
                      • 我要第一个说:“wat”
                      • 这没有回答问题
                      【解决方案19】:

                      有两种方法可以做到这一点..说 String==nullstring.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 的另一个快捷版本的例子..

                      【讨论】:

                      • 不! .equals() 不得与可能为 null 的对象一起使用,因此介绍性解释是错误的。这个答案的其余部分似乎毫无意义,与所提出的问题无关。
                      猜你喜欢
                      • 2020-10-17
                      • 2016-02-05
                      • 2013-01-21
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多