2010-03-04 66 views
0

我正在使用一個servlet來執行一系列操作。想要測試查詢字符串中的參數值爲空

如果一個特定的參數「t」不存在我想做某些類型的處理,如果它我想做不同的事情。

我想測試參數t(我保存爲一個名爲editType字符串),使用以下條件:

String editType = request.getParameter("t"); 
if(!editType.isEmpty()||!(editType==null)){ 
    //processing here 
} 

我如何做這個測試正常,因爲我得到的問題一個nullpointerexception,因爲我的代碼似乎總是期望值爲「t」我需要能夠創建一個不期望t的條件(允許它爲空),並在那做處理。

+0

你的問題是什麼? – 2010-03-04 09:16:26

+1

我刪除了servlet標記,因爲您沒有特別的Servlet API問題,也沒有收到'javax.servlet'包的異常。 RuntimeExceptions只是「開發人員錯誤」,因此也是基本的Java。 – BalusC 2010-03-04 12:29:53

回答

10

您需要重新整理你的比較了一下,特別是檢查null第一:

String editType = request.getParameter("t"); 
if(editType!=null && !editType.isEmpty()){ 
    //processing here 
} 

您所遇到的問題是Java試圖調用isEmpty()方法null對象上,這就是爲什麼你需要首先檢查null

Java使用Short-circuit evaluation,這意味着它會檢查你的條件從左到右,只要它找到一個讓它決定整個條件的結果,它就會停止評估。因此,如果editType最終爲空,則Java將停止評估整個if語句,並且不會嘗試調用isEmpty()(這將導致NullPointerException)。

+0

打我吧(反對投票:P) – DaveJohnston 2010-03-04 09:21:12

+0

+1對於接受沉默-1是一個很好的答案;) – sfussenegger 2010-03-04 09:21:22

1

啊,我看到你標記爲nullpointerexception,所以我猜測。您應該測試空,然後再空虛後:

if (editType != null || !editType.isEmpty()) { 
    //processing here 
} 

然而,這將評估爲true,如果editType是一個空字符串。爲了得到正確的結果,你應該使用AND(& &),而不是OR(||),像這樣:

if (editType != null && !editType.isEmpty()){ 
    //processing here 
} 
+0

你的第一個片段將拋出一個'NullPointerException'。 – xehpuk 2015-02-17 22:57:38

0

您必須運行此代碼問題。

這是這種方式更好:

String editType = request.getParameter("t"); 
if(editType!=null&&!editType.isEmpty()){ 
    //processing here 
} 

空試驗必須在前面,以避免無效的方法調用。

+0

哦..我太慢了.. – 2010-03-04 09:20:13

+0

需要用'&&'代替'||'。 – fastcodejava 2010-03-04 09:57:27

+0

@fastcodejava,對,謝謝! – 2010-03-05 02:54:23

0

首先,您的if語句中的條件從左到右進行評估。所以它檢查的第一件事是editType.isEmpty(),如果editType爲null,你將會有一個空指針異常。因此,if的第一部分應該是editType!= null(首選爲!(editType == null))。

1

你應該將其更改爲

String editType = request.getParameter("t"); 
if(editType != null && !editType.isEmpty()){ 
    //processing here 
} 

這是非常有用的一些StringUtil類,提供了一個ifEmpty()方法,因爲這是很常見的:

public static final class StringUtil { 
    private StringUtil() { 
    } 

    public static boolean isEmpty(String s) { 
     return s != null && !s.isEmpty(); 
    } 
} 

不是改變你的代碼

String editType = request.getParameter("t"); 
if(!StringUtil.isEmpty(editType)){ 
    //processing here 
} 
0
String editType = request.getParameter("t"); 
if(!(editType == null || editType.isEmpty())){ 
    //processing here 
} 

對一些人來說,這讀起來更好。

相關問題