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

时间:2011-04-01 13:06:06

标签: 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) || string4.equals(null)
然后它看起来很奇怪。如果有大约10个字符串则更难看。

请告诉我最佳做法。

9 个答案:

答案 0 :(得分:11)

您应该编写如下方法;;

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);

答案 1 :(得分:2)

至少你可以优化:

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

StringUtils.isBlank(string1);

StringUtils:http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/StringUtils.html

答案 2 :(得分:2)

不确定最佳做法,但您可以整理代码:

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
}

你可以使用List使它更好。

编辑

是的,因为彼得说使用VarArgs (我应该更频繁地做!)

private boolean stringValidate(String... inputs) {
      for (String currentString  : inputs) {
          if(currentString == null || currentString.equals(""){
               return false; // validation failed
           }
      }
      return true; // Validation passed
   }

这样称呼:

stringValidate("foo", "bar", "bar");

答案 3 :(得分:1)

string.equals(null)永远不会有效,因为如果string为null,你就会得到一个NPE。我想你的意思是string == null

尽管如此,你可以使用apache commons lang StringUtils来减少支票StringUtils.isEmpty(string) || ...

答案 4 :(得分:1)

创建一个验证方法来处理每一个。

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

然后,您可以为每个字符串调用此方法。请注意,如果您使用的是早于java的1.6版本,则可以将isEmpty()方法替换为!parameter.equals("")

答案 5 :(得分:1)

首先,string.equals(null)永远不会成立。如果string为null,则会抛出NullPointerException。

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

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

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

答案 6 :(得分:0)

首先,最佳做法是

 "FOO".equals(myString)

代替。这减少了NPE的机会,并且更清楚地表明没有突变发生。有关此问题的讨论,请参阅here

另外,如果你真的有要比较的字符串集合,你可能想要

 final Set<String> validStrings = ...

 boolean validate(final String foo) {
    return foo!=null && validStrings.contains(foo);
 }

答案 7 :(得分:0)

当您处理大量相同类型的变量时,您可以在结构中管理它们,例如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;
}

答案 8 :(得分:0)

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

StringUtils.isAnyEmpty(String... args)

StringUtils.isAnyBlank(String... args)

希望这对某人有帮助!

文档,here

相关问题