在JAVA中验证多个字段的最佳方法?

在JAVA中验证多个字段的最佳方法?,java,validation,Java,Validation,您好,我有许多字段需要为null和空字段进行验证,即“ 如果我必须验证5个字符串,那么下面是代码 string.equals("") || string1.equals("") || string2.equals("") || string3.equals("") || string4.equals("") || string.equals(null) || string1.equals(null) || string2.equals(null) || string3.equals(null

您好,我有许多字段需要为null和空字段进行验证,即

如果我必须验证5个字符串,那么下面是代码

string.equals("") || string1.equals("") || string2.equals("") || string3.equals("") || string4.equals("")
 || 
string.equals(null) || string1.equals(null) || string2.equals(null) || string3.equals(null) || string4.equals(null)
然后看起来很奇怪。如果有大约10根弦,那么就更难看了

请告诉我这样做的最佳实践。

string.equals(null)
永远不会工作,因为如果string为null,您将获得NPE。我猜你的意思是
string==null


然而,您可以使用ApacheCommonsLang的
StringUtils
,这将把检查减少到
StringUtils.isEmpty(string)|…
创建一个验证方法来处理每一个

private boolean isValid(String parameter){
if (parameter == null || parameter.isEmpty()) return false;
return true;
}

然后可以为每个字符串调用此方法。请注意,如果您使用的是早于1.6的java版本,则可以将
isEmpty()
方法替换为
!参数.equals(“”)
至少您可以优化:

string1.equals("") || string1.equals(null)


StringUtils:

不确定最佳实践,但您可以整理代码:

String[] inputs = new String[5];
inputs[0] = "whatever";

private boolean stringValidate(String[] inputs){
      for(int i=0; i < inputs.size(); i++){
           String currentString = inputs[i];
           if(currentString == null || currentString.equals(""){
               return false; // validation failed
           }
      }
      return true; // Validation passed
}
这样称呼:

stringValidate("foo", "bar", "bar");
首先,string.equals(null)永远不会为真。is string为null这将引发NullPointerException

您可以使用
string==null | | string.equals(“”)

问题是,有许多字段/变量需要以通用方式处理,但名称不同。另一种方法是使用数组或列表

String[] strings = { .... }
boolean notAllSet = false;
for(String s: strings)
   notAllSet |= s==null || s.equals("");

首先,最好的做法是

 "FOO".equals(myString)
相反。这降低了NPE的发生几率,并且更清楚地表明没有发生突变。有关这方面的讨论,请参阅

此外,如果您确实有一组字符串可供比较,则可能需要

 final Set<String> validStrings = ...

 boolean validate(final String foo) {
    return foo!=null && validStrings.contains(foo);
 }
最终设置有效字符串=。。。
布尔验证(最终字符串foo){
return foo!=null&&validStrings.contains(foo);
}

当处理许多相同类型的变量时,可以在结构(如ArrayList)中管理它们,然后创建一个方法来为您完成这项工作

public static void main(String[] args){
    ArrayList<String> hold = new ArrayList<String>();
    hold.add(string);
    hold.add(string1);
    hold.add(string2);
    hold.add(string3);
    hold.add(string4);

    if( validate(hold) )
        System.out.println("No blanks, no nulls");
}

public boolean validate(ArrayList<String> hold){
     for( int x = 0; x < hold.size(); x++ ){
          if( hold.get(x).equals("") || hold.get(x).equals(null) )
                return false;
     }

     return true;
}
publicstaticvoidmain(字符串[]args){
ArrayList保持=新建ArrayList();
按住。添加(字符串);
保留。添加(string1);
保留。添加(string2);
保留。添加(string3);
保留。添加(第4行);
如果(验证(保留))
System.out.println(“无空白,无空白”);
}
公共布尔值验证(ArrayList保持){
对于(int x=0;x
您应该编写如下方法

public static boolean isNullOrEmpty(String... strArr) {
       for (String st : strArr) {
            if  (st==null || st.equals(""))
               return true;

       } 
       return false;
}



boolean result = isNullOrEmpty(string1,strin2,string3,string4,string5);

我知道这个问题很老了,但我发现
StringUtils
更适合这个问题

StringUtils.isAnyEmpty(字符串…参数)

StringUtils.isAnyBlank(字符串…参数)

希望这对别人有帮助


文档,

10您提出了一个问题,没有一个答案值得您回答。接受您的部分答案,它是上下箭头左侧的绿色勾号。您发布“值得”的评论,就像您自己值得我接受任何答案一样。:)当然我会这么做。您只能将一个答案标记为“绿色记号”,您已将其删除;-)@哦,对不起,我不知道“一个答案”的限制。无论如何,我认为你的答案是有用的。如果我的问题在任何情况下对你有用或清楚,那么你可以放弃使用varargs和foreach循环将使这一点变得更好+1:使用varargs,您不需要
新字符串[]{
;),可能
isNullOrEmpty
是better@PeterLawrew,应用了建议的更改。:)只需要在if语句中添加一个“)”;)请告诉我有关StringUtils的信息。这是一个系统类还是任何框架类?
public static void main(String[] args){
    ArrayList<String> hold = new ArrayList<String>();
    hold.add(string);
    hold.add(string1);
    hold.add(string2);
    hold.add(string3);
    hold.add(string4);

    if( validate(hold) )
        System.out.println("No blanks, no nulls");
}

public boolean validate(ArrayList<String> hold){
     for( int x = 0; x < hold.size(); x++ ){
          if( hold.get(x).equals("") || hold.get(x).equals(null) )
                return false;
     }

     return true;
}
public static boolean isNullOrEmpty(String... strArr) {
       for (String st : strArr) {
            if  (st==null || st.equals(""))
               return true;

       } 
       return false;
}



boolean result = isNullOrEmpty(string1,strin2,string3,string4,string5);