想要在querystring中测试参数值是否为null

时间:2010-03-04 09:15:17

标签: java

我正在使用servlet来做一系列事情。

如果某个特定参数“t”不存在,我想进行某些类型的处理,如果是,我想做不同的事情。

我正在尝试使用以下条件测试参数t(我将其保存为名为editType的String):

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

我如何正确地进行此测试,因为我遇到了nullpointerexception的问题,因为我的代码似乎总是期望“t”的值我需要能够创建一个不期望t的条件(允许它为null),然后进行处理。

6 个答案:

答案 0 :(得分:15)

您需要稍微重新排序比较,特别是首先检查null

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

您遇到的问题是Java正在尝试在isEmpty()对象上调用null方法,这就是您需要先检查null的原因。

Java使用Short-circuit evaluation,这意味着它将从左到右检查您的条件,一旦找到一个让它决定整个条件的结果,它就会停止评估。因此,如果editType最终为null,则Java将停止评估整个if语句,并且不会尝试调用isEmpty()(这将导致NullPointerException)。< / p>

答案 1 :(得分:2)

啊,我看到你标记了nullpointerexception,所以我猜了一下。你应该首先测试null,然后测试空虚:

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

但是,如果editType为空字符串,则会评估为true。要获得正确的结果,您应该使用AND(&amp;&amp;)而不是OR(||),如下所示:

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

答案 2 :(得分:1)

您应该将其更改为

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

有一些提供ifEmpty()方法的StringUtil类很有用,因为这很常见:

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
}

答案 3 :(得分:0)

运行此代码时会遇到问题。

这样做更好:

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

null测试必须在前面,以避免在null上进行方法调用。

答案 4 :(得分:0)

首先,从左到右评估if语句中的条件。所以它检查的第一件事是editType.isEmpty(),如果editType为null,你将有一个空指针异常。所以if的第一部分应该是editType!= null(首选!(editType == null))。

答案 5 :(得分:0)

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

对某些人来说,这读得更好。