如何在java中检查字符串中的null?我正在使用
stringname.equalsignorecase(null)
但它不起作用。
答案 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
,它遵循两个可能的条件: -
stringname
有一些非空字符串值(比如“计算机”):"computer".equalsignorecase(null)
false
。stringname
的值为null
:null.equalsignorecase(null)
true
,null
不是可以执行equalsignorecase()
方法的对象。因此,由于案例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"
的更大问题。