如何检查我的字符串是不是等于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()
也没有。如果myString
是null
,你将如何调用它的方法? :)
我可以建议你在 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.Empty
或 str = ""
,结果为 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)
:
对于任何非空引用值
x
,x.equals(null)
应该是return false
。
与null
比较的方法是使用x == null
和x != null
。
此外,x.field
和 x.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】:如果myString
是null
,则调用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 中的对象或其他字符串值?