【发布时间】:2010-05-27 11:11:23
【问题描述】:
如何在 java 中检查字符串是否为 null?我正在使用
stringname.equalsignorecase(null)
但它不起作用。
【问题讨论】:
-
1. equalsignorecase - 如果传递的参数为空,则返回 false 2. 由于 stringname 是一个字符串对象,您可以简单地使用 stringname == null
如何在 java 中检查字符串是否为 null?我正在使用
stringname.equalsignorecase(null)
但它不起作用。
【问题讨论】:
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 抛出异常时,它会花费很多时间。其次,如果你提前检查空指针,代码更容易阅读和维护。
【讨论】:
s == null
不行吗?
【讨论】:
equals()。但是如果要检查变量是否为null,则使用==。
当然可以。您错过了代码的重要部分。你只需要这样做:
boolean isNull = false;
try {
stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
isNull = true;
}
;)
【讨论】:
如果你在 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;
}
【讨论】:
如果我们看一下equalsIgnoreCase方法的实现,我们会发现这部分:
if (string == null || count != string.count) {
return false;
}
因此,如果参数是null,它将始终返回false。这显然是正确的,因为它应该返回 true 的唯一情况是在 null String 上调用 equalsIgnoreCase 时,但是
String nullString = null;
nullString.equalsIgnoreCase(null);
肯定会导致 NullPointerException。
因此,equals 方法并非旨在测试对象是否为空,只是因为您无法在 null 上调用它们。
【讨论】:
这看起来有点奇怪,但是……
stringName == null || "".equals(stringName)
这样做从来没有任何问题,而且它是一种更安全的检查方式,同时避免潜在的空点异常。
【讨论】:
我不确定 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 的可能性。
【讨论】:
如果您的字符串具有“null”值,那么您可以使用
if(null == stringName){
[code]
}
else
[Error Msg]
【讨论】:
在你的课堂上导入它
import org.apache.commons.lang.StringUtils;
然后使用它,它们都会返回true
System.out.println(StringUtils.isEmpty(""));
System.out.println(StringUtils.isEmpty(null));
【讨论】:
您可以使用 String == null 进行检查
这对我有用
String foo = null;
if(foo == null){
System.out.println("String is null");
}
【讨论】:
当然 user351809、stringname.equalsignorecase(null) 会抛出 NullPointerException。
看,你有一个字符串对象stringname,它遵循两个可能的条件:-
stringname 有一个非空字符串值(比如“计算机”):"computer".equalsignorecase(null)false的预期响应。stringname 有一个 null 值:null.equalsignorecase(null)true,null 不是可以执行equalsignorecase() 方法的对象。因此,由于案例 2,您会遇到异常。
我建议你简单地使用stringname == null
【讨论】:
简单方法:
public static boolean isBlank(String value) {
return (value == null || value.equals("") || value.equals("null") || value.trim().equals(""));
}
【讨论】:
使用 Java 7,您可以使用
if (Objects.equals(foo, null)) {
...
}
如果两个参数都是null,则返回true。
【讨论】:
如果我理解正确,应该这样做:
if(!stringname.isEmpty())
// an if to check if stringname is not null
if(stringname.isEmpty())
// an if to check if stringname is null
【讨论】:
我知道这是很久以前回答的,但我还没有看到这个帖子,所以我想我会分享我的工作。这对代码的可读性不是特别好,但是如果您必须进行一系列空值检查,我喜欢使用:
String someString = someObject.getProperty() == null ? "" : someObject.getProperty().trim();
在此示例中,对字符串调用 trim,如果字符串为 null 或空格,则会抛出 NPE,但在同一行上,您可以检查 null 或空白,这样您就不会得到一个 ton (更多)难以格式化的 if 块。
【讨论】:
如果返回的value 为空,则使用:
if(value.isEmpty());
有时检查 null,if(value == null) 在 java 中,即使 String 为 null,它也可能不会给出 true。
【讨论】:
if(value.isEmpty()) 给出NullPointerException。在这种情况下最好使用if(value == null)
Apache StringUtils 类将为您执行此操作。
StringUtils.equals(col1, col2)
当 col1、col2 或两者都为 null 时正常工作。
考虑阅读整个StringUtils JavaDoc 页面。 它已经解决了大部分(如果不是全部的话)字符串操作和/或比较 你会遇到的问题。
【讨论】:
嗯,上次有人问这个愚蠢的问题时,答案是:
someString.equals("null")
不过,这个“修复”只是隐藏了更大的问题,即 null 首先如何变成 "null"。
【讨论】:
有两种方法可以做到这一点..说 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 的另一个快捷版本的例子..
【讨论】: