如何检查我的字符串是不是等于null?

Posted

技术标签:

【中文标题】如何检查我的字符串是不是等于null?【英文标题】:How to check if my string is equal to null?如何检查我的字符串是否等于null? 【发布时间】:2011-02-05 19:34:56 【问题描述】:

仅当我的字符串具有有意义的值时,我才想执行一些操作。所以,我尝试了这个。

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")) 有效。

【问题讨论】:

null 没有任何方法,所以equals() 也没有。如果myStringnull,你将如何调用它的方法? :) 我可以建议你在 if 块之前System.out.println(myString),这样你就可以看到那里有什么? 你怎么知道“它等于null”? null 分配给这个变量被转换为"null" - 这是一个糟糕的主意。如果可能,请尝试更改此设计。 呸——我不认为检查 (!myString.equals("null")) 是否是最好的解决方案。我怀疑大多数人会认为将字符串“null”分配给 myString 是一个错误。 【参考方案1】:

工作!!!!

 if (myString != null && !myString.isEmpty()) 
        return true;
    
    else 
        return false;
    

更新

对于 Kotlin,我们通过以下方式检查字符串是否为空

return myString.isNullOrEmpty() // Returns `true` if this nullable String is either `null` or empty, false otherwise

return myString.isEmpty() // Returns `true` if this char sequence is empty (contains no characters), false otherwise

【讨论】:

【参考方案2】:

如果 myString 实际上为 null,则对引用的任何调用都将失败,并出现 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();

【讨论】:

好点,但最后两个 if 不等价。使用 myString = "abc",中间的不调用 doSomething,但第三个调用。 @rimsky 已修复【参考方案3】:

我总是这样使用:

if (mystr != null && !mystr.isEmpty())
  //DO WHATEVER YOU WANT OR LEAVE IT EMPTY
else 
  //DO WHATEVER YOU WANT OR LEAVE IT EMPTY

或者您可以将其复制到您的项目中:

private boolean isEmptyOrNull(String mystr)
    if (mystr != null && !mystr.isEmpty()) return true; 
    else  return false; 

然后就这样称呼它:

boolean b = isEmptyOrNull(yourString);

如果为空或 null,它将返回 true。b=true 如果为空或 null

或者你可以在它为空时使用try catch和catch。

【讨论】:

【参考方案4】:

如果您在 android 中工作,那么您可以使用简单的 TextUtils 类。 检查以下代码:

if(!TextUtils.isEmpty(myString))
 //do something

这是代码的简单用法。答案可能会重复。但是为您提供单一和简单的检查很简单。

【讨论】:

【参考方案5】:

对我来说,最好检查一个字符串在 Java 中是否有任何有意义的内容:

string != null && !string.trim().isEmpty()

首先检查字符串是否为null 以避免NullPointerException,然后修剪所有空格字符以避免检查只有空格的字符串,最后检查修剪后的字符串是否不为空,即长度为0。

【讨论】:

【参考方案6】:

好的,这就是数据类型在 Java 中的工作方式。 (你必须原谅我的英语,我很可能没有使用正确的词汇。 你必须区分它们中的两个。基本数据类型和普通数据类型。基本数据类型几乎构成了所有存在的东西。 例如,所有数字、字符、布尔值等。 普通数据类型或复杂数据类型就是其他一切。 String 是一个字符数组,因此是一种复杂的数据类型。

您创建的每个变量实际上都是内存中值的指针。 例如:

String s = new String("This is just a test");

变量“s”不包含字符串。它是一个指针。这个指针指向你内存中的变量。 当您调用System.out.println(anyObject) 时,将调用该对象的toString() 方法。如果它没有从 Object 覆盖 toString,它将打印指针。 例如:

public class Foo
    public static void main(String[] args) 
        Foo f = new Foo();
        System.out.println(f);
    


>>>>
>>>>
>>>>Foo@330bedb4

“@”后面的所有内容都是指针。这仅适用于复杂的数据类型。原始数据类型直接保存在它们的指针中。所以实际上没有指针,直接存储值。

例如:

int i = 123;

i 在这种情况下不存储指针。我将存储整数值 123(以字节 ofc 为单位)。

好的,让我们回到== 运算符。 它总是比较指针而不是内存中指针所在位置保存的内容。

例子:

String s1 = new String("Hallo");
String s2 = new String("Hallo");

System.out.println(s1 == s2);

>>>>> false

这两个字符串都有不同的指针。 String.equals(String other) 但是比较内容。您可以使用“==”运算符比较原始数据类型,因为具有相同内容的两个不同对象的指针是相等的。

Null 表示指针为空。默认情况下,空的原始数据类型为 0(对于数字)。然而,任何复杂对象的 Null 都意味着该对象不存在。

问候

【讨论】:

【参考方案7】:

例外也可能有帮助:

try 
   //define your myString

catch (Exception e) 
   //in that case, you may affect "" to myString
   myString="";

【讨论】:

【参考方案8】:

我一直在用StringUtil.isBlank(string)

它测试字符串是否为空:null、emtpy 或只有空格。

所以这是迄今为止最好的一个

这是文档中的原始方法

/**
    * Tests if a string is blank: null, emtpy, or only whitespace (" ", \r\n, \t, etc)
    * @param string string to test
    * @return if string is blank
    */
    public static boolean isBlank(String string) 
        if (string == null || string.length() == 0)
            return true;

        int l = string.length();
        for (int i = 0; i < l; i++) 
            if (!StringUtil.isWhitespace(string.codePointAt(i)))
                return false;
        
        return true;
     

【讨论】:

【参考方案9】:

我尝试了上面给出的大多数示例,用于我正在构建的 android 应用程序中的 null 并且它都失败了。所以我想出了一个适合我的解决方案。

String test = null+"";
If(!test.equals("null")
       //go ahead string is not null


因此,只需像上面 l 那样连接一个空字符串并针对“null”进行测试,它就可以正常工作。实际上没有抛出异常

【讨论】:

不,这绝对是一个糟糕的解决方案。上面的答案有效。 @KonradRudolph 在得出结论之前,我实际上尝试了上述一些解决方案。我尝试在 recyclerview 适配器中使用这些解决方案,但在我想出这个答案之前它没有给我正确的结果。 我可以自信地说,这意味着您的代码存在 else 错误,您只是在修复症状,而不是错误的根源。不要误会,这是cargo cult programming的典型案例。【参考方案10】:

在 Android 中,您可以使用来自 TextUtils 的实用方法 isEmpty 进行检查,

public static boolean isEmpty(CharSequence str) 
    return str == null || str.length() == 0;

isEmpty(CharSequence str) 方法检查两个条件,null 和长度。

【讨论】:

【参考方案11】:

您需要检查myString 对象是否为null

if (myString != null) 
    doSomething

【讨论】:

【参考方案12】:

你必须检查 null if(str != null).

【讨论】:

您的解决方案是多年前由其他用户发布的...重复它有什么意义? 我没有看到确认的答案,这就是我回复他的原因 对,他从 2010 年起就没有确认过答案,所以你重复之前的答案,他会确认你的答案...【参考方案13】:

我更喜欢使用:

if(!StringUtils.isBlank(myString))  // checks if myString is whitespace, empty, or null
    // do something

阅读StringUtils.isBlank() vs String.isEmpty()。

【讨论】:

【参考方案14】:

您可以使用以下方法检查字符串是否等于 null:

String Test = null;
(Test+"").compareTo("null")

如果结果为 0 则 (Test+"") = "null"。

【讨论】:

这只是创建了一个不必要的字符串【参考方案15】:

我认为 myString 不是一个字符串,而是一个字符串数组。以下是您需要做的:

String myNewString = join(myString, "")
if (!myNewString.equals(""))

    //Do something

【讨论】:

我的代码用于处理。 Processing 是一种基于 java 的编程语言。更多加盟信息:processing.org/reference/join_.html.【参考方案16】:

Apache commons StringUtils.isNotEmpty 是最好的选择。

【讨论】:

或 StringUtils.isEmpty() 用于检查字符串是否为 Null/Empty【参考方案17】:

我在 android 中遇到了这个问题,我使用这种方式(为我工作):

String test = null;
if(test == "null")
// Do work

但在我使用的 java 代码中:

String test = null;
if(test == null)
// Do work

还有:

private Integer compareDateStrings(BeanToDoTask arg0, BeanToDoTask arg1, String strProperty) 
    String strDate0 = BeanUtils.getProperty(arg0, strProperty);_logger.debug("strDate0 = " + strDate0);
    String strDate1 = BeanUtils.getProperty(arg1, strProperty);_logger.debug("strDate1 = " + strDate1);
    return compareDateStrings(strDate0, strDate1);


private Integer compareDateStrings(String strDate0, String strDate1) 
    int cmp = 0;
    if (isEmpty(strDate0)) 
        if (isNotEmpty(strDate1)) 
            cmp = -1;
         else 
            cmp = 0;
        
     else if (isEmpty(strDate1)) 
        cmp = 1;
     else 
        cmp = strDate0.compareTo(strDate1);
    
    return cmp;


private boolean isEmpty(String str) 
    return str == null || str.isEmpty();

private boolean isNotEmpty(String str) 
    return !isEmpty(str);

【讨论】:

【参考方案18】:

每次我必须处理字符串时(几乎每次),我都会停下来想知道哪种方法真的是检查空字符串的最快方法。当然 string.Length == 0 检查应该是最快的,因为 Length 是一个属性,除了检索属性的值之外不应该有任何处理。但后来我问自己,为什么会有 String.Empty?我告诉自己,检查 String.Empty 应该比检查长度更快。好吧,我最终决定测试一下。我编写了一个小型 Windows 控制台应用程序,它告诉我对 1000 万次重复进行特定检查需要多长时间。我检查了 3 个不同的字符串:一个 NULL 字符串、一个空字符串和一个 "" 字符串。我使用了 5 种不同的方法:String.IsNullOrEmpty()、str == null、str == null || str == String.Empty, str == null || str == "", str == null || str.length == 0。结果如下:

String.IsNullOrEmpty()
NULL = 62 milliseconds
Empty = 46 milliseconds
"" = 46 milliseconds

str == null
NULL = 31 milliseconds
Empty = 46 milliseconds
"" = 31 milliseconds

str == null || str == String.Empty
NULL = 46 milliseconds
Empty = 62 milliseconds
"" = 359 milliseconds

str == null || str == ""
NULL = 46 milliseconds
Empty = 343 milliseconds
"" = 78 milliseconds

str == null || str.length == 0
NULL = 31 milliseconds
Empty = 63 milliseconds
"" = 62 milliseconds

根据这些结果,平均而言,检查 str == null 是最快的,但可能并不总能得到我们正在寻找的结果。 if str = String.Emptystr = "",结果为 false。然后你有 2 个并列第二位:String.IsNullOrEmpty()str == null || str.length == 0。由于String.IsNullOrEmpty() 看起来更好,并且更容易(更快)编写,我建议使用它而不是其他解决方案。

【讨论】:

【参考方案19】:

我鼓励使用现有的实用程序,或创建自己的方法:

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

然后在需要时使用它:

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

如上所述,||和 && 运算符短路。这意味着一旦他们可以确定他们的价值,他们就会停止。因此,如果 (string == null) 为真,则不需要计算长度部分,因为表达式始终为真。与 && 类似,如果左侧为假,则表达式始终为假,无需进一步计算。

作为附加说明,使用长度通常比使用 .equals 更好。性能稍好一些(不多),并且不需要创建对象(尽管大多数编译器可能会对此进行优化)。

【讨论】:

【参考方案20】:

if(str.isEmpty() || str==null) do whatever you want

【讨论】:

isEmpty 被反转了。如果你在 null 对象上调用方法,你会得到 NPE 如果字符串为空,你会得到一个空指针异常,甚至在你检查它是否为空之前。永远不要使用此代码!【参考方案21】:

我会这样做:

( myString != null && myString.length() > 0 )
    ? doSomething() : System.out.println("Non valid String");
null 测试检查 myString 是否包含 String 的实例。 length() 返回长度,相当于equals("")。 首先检查 myString 是否为 null 将避免 NullPointerException。

【讨论】:

【参考方案22】:
if (myString != null && !myString.isEmpty()) 
  // doSomething


作为进一步的评论,您应该注意equals 合同中的这个术语:

来自Object.equals(Object)

对于任何非空引用值xx.equals(null) 应该是return false

null比较的方法是使用x == nullx != null

此外,x.fieldx.method() 抛出 NullPointerException if x == null

【讨论】:

为了提高效率,您应该进行长度检查而不是等于。检查此链接hanuska.blogspot.com/2006/08/empty-string.html 我会说你应该使用s.isEmpty() 而不是s.length() == 0 以提高可读性。性能上的任何差异都可以忽略不计。我同意s.equals("") 很糟糕。 我同意可读性。这取决于我们使用的是 Java 5 还是 Java 6,因为 isEmpty() 仅在 Java 6 中。 @CoolBeans:好评!我没有意识到这一点!我参加 Java 派对有点晚了 =)【参考方案23】:
 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

【讨论】:

【参考方案24】:

这应该可行:

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

如果不是,那么 myString 可能具有您不期望的值。尝试像这样打印出来:

System.out.println("+" + myString + "+");

使用“+”符号将字符串括起来会显示其中是否有您没有考虑到的额外空格。

【讨论】:

【参考方案25】:

如果你的字符串为空,这样的调用应该抛出 NullReferenceException:

myString.equals(null)

但无论如何,我认为这样的方法是你想要的:

public static class StringUtils

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

然后在您的代码中,您可以执行以下操作:

if (!StringUtils.isNullOrEmpty(myString))

    doSomething();

【讨论】:

【参考方案26】:

如果myStringnull,则调用myString.equals(null)myString.equals("") 将失败并返回NullPointerException。您不能在空变量上调用任何实例方法。

首先检查 null,如下所示:

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

如果myString 未通过空值检查,则使用short-circuit evaluation 不尝试.equals

【讨论】:

+1 表示短路;表达式的工作是必不可少的。但是,您确实应该使用.isEmpty() 而不是.equals("") 好的,我打算对这篇文章发表评论。哈哈。 ->“出于效率目的,您应该进行长度检查而不是equals。检查此链接hanuska.blogspot.com/2006/08/empty-string.html” @CoolBeans:当然,使用 Java 6 你甚至可以做到myString.isEmpty()。但在这个层面上,可读性胜过优化,人们可能更习惯阅读myString.equals("")。 (或者可能没有。)【参考方案27】:

试试,

myString!=null && myString.length()>0

【讨论】:

如果 myString 为空,这是不可能的 这在 myString 为空时很有可能。你应该知道,当 && 的左边部分失败时,右边的表达式根本不会被计算..

以上是关于如何检查我的字符串是不是等于null?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查一个字符是不是等于一个空格?

如何检查字符串是不是不等于 java 中的对象或其他字符串值?

如何进行`if`检查键入的单词是不是等于C中字符串列表中的某个单词? [复制]

检查字符串是不是等于实体中的对象属性

流星模板,检查值是不是等于字符串

Android 应用程序 - 检查用户的当前位置是不是等于(字符串)地址