2012-01-23 82 views
33

我傳遞一個ACCOUNTID從XML文件輸入如圖所示,這將在後面分析,並且將在代碼中使用:我們可以依賴String.isEmpty來檢查Java中String的空條件嗎?

<accountid>123456</accountid> 
<user>pavan</user> 

的問題是,如果不通過(在accoutnid空值)按照慣例傳遞,我無法在Java代碼中處理這種情況。我試過,但我沒有成功:

if (acct != null||acct==""||acct.equals("")) 
{ 
    // the above is not working 
} 

我能夠處理這種成功使用以下方法:

if(!acct.isEmpty()) 
{ 
    // thisis working 
} 

我們可以依靠String.isEmpty()方法檢查所涉及的無效狀態String?這有效嗎?

回答

85

不行,絕對不行 - 因爲如果acct爲null,它甚至不會得到isEmpty ...它會立即拋出一個NullPointerException

您的測試應該是:

if (acct != null && !acct.isEmpty()) 

注意使用&&這裏,而不是在前面的代碼你||;還請注意,在您之前的代碼中,您的條件無論如何都是錯誤的 - 即使使用&&,您只需輸入if正文如果acct爲空字符串。

另外,使用Guava

if (!Strings.isNullOrEmpty(acct)) 
+1

有些人也喜歡這個版本的同樣的檢查:'「」.equals(acct)' – AlexZam

+0

嗨,喬恩,我嘗試了一個示例程序,String str =「」; System.out.println(str.isEmpty()); ,在這裏它返回true,它沒有拋出NullPointerException。那麼爲什麼我們不能使用isEmpty來檢查空值你能否澄清這一點? – Kiran

+0

@Kiran:因爲「」與空引用不同。試着用'String str = null;'和* then *你會得到一個'NullPointerException'。瞭解空字符串引用與引用空字符串的字符串引用之間的區別非常重要。 –

6

不能使用String.isEmpty(),如果它是空的。最好是有自己的方法來檢查空或空。

public static boolean isBlankOrNull(String str) { 
    return (str == null || "".equals(str.trim())); 
} 
+6

我會推薦使用來自commons-lang的StringUtils,而不是編寫自己的。 – Vadim

+2

+1我不會推薦將commons-lang添加到您的項目中(除非您已經包括它),只是爲了這樣一種簡單的方法。 – leonbloy

+0

閱讀上面的答案,如何'str == null || str.trim()的isEmpty()'? –

0
String s1=""; // empty string assigned to s1 , s1 has length 0, it holds a value of no length string 

String s2=null; // absolutely nothing, it holds no value, you are not assigning any value to s2 

所以空是不一樣的空。

希望有幫助!

+0

這個問題不是關於空和空是否相同。相反,OP是問他是否可以依靠String isEmpty方法來檢查null。 – NSNoob

11

改爲使用StringUtils.isEmpty,它也會檢查null。

的例子是:

StringUtils.isEmpty(null)  = true 
StringUtils.isEmpty("")  = true 
StringUtils.isEmpty(" ")  = false 
StringUtils.isEmpty("bob")  = false 
StringUtils.isEmpty(" bob ") = false 

查看更多關於official Documentation on String Utils

+0

只有鏈接的答案應該發佈爲評論 – NSNoob

+3

但是因此我需要更多的聲望 – lradacher

1

沒有,String.isEmpty()方法看起來如下:

public boolean isEmpty() { 
    return this.value.length == 0; 
} 

,你可以看到它檢查字符串 所以你一定要檢查字符串之前是空的長度。

相關問題