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

4

你好,我有很多需要验证是否为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个字符串,则会更加难看。

请告诉我最佳实践方法。


3
你有提出了10个问题,但似乎没有一个答案能够满足你的要求? - Gursel Koca
1
接受你的答案,是在上下箭头左侧的绿色勾号。 - Blundell
你发表“有价值”的评论,就像你自己一样有价值,让我接受任何答案。 :) 当然,我会这么做的。 - Muhammad Imran Tariq
您只能将一个答案标记为“绿色勾号”,您已经删除了它;-) - Blundell
@Blundell 哦,抱歉我不知道有“一个答案”的限制。不过无论如何,我会采纳你的回答(很有用)。如果我的问题对你有用或者表述清晰,那么你可以给个赞 :) - Muhammad Imran Tariq
9个回答

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
+1:使用可变参数,您不需要 new String[] { ;) 或许 isNullOrEmpty 更好。 - Peter Lawrey
1
@Peter Lawrew,已应用推荐的更改。 :) - Gursel Koca
只需要在if语句中添加一个 ')' 即可。 ;) - Peter Lawrey

2

请告诉我关于StringUtils的信息。这是一个系统类还是任何框架类? - Muhammad Imran Tariq

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
}

你可以使用列表,使它更好看。
编辑:
是的,正如Peter所说,使用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");

1
使用可变参数和foreach循环会使代码更加优美。;) - Peter Lawrey

1
首先,string.equals(null)永远不会为真。如果string是null,这将抛出NullPointerException。
您可以使用string == null || string.equals("") 您面临的问题是有许多字段/变量,您希望以通用方式处理,但名称不同。另一种选择是使用数组或列表。
String[] strings = { .... }
boolean notAllSet = false;
for(String s: strings)
   notAllSet |= s==null || s.equals("");

1

string.equals(null)永远不会起作用,因为如果字符串为空,你会得到一个NPE。我想你的意思是string == null

尽管如此,你可以使用apache commons lang的StringUtils,这将把检查减少到StringUtils.isEmpty(string) || ...


1
创建一个验证方法来处理每个方法。
private boolean isValid(String parameter){
if (parameter == null || parameter.isEmpty()) return false;
return true;
}

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


0

首先,最佳实践是要做到

 "FOO".equals(myString)

相反,使用“equals”方法。这样可以减少NPE的可能性,并清楚地表明没有进行任何变异。有关此问题的讨论,请参见此处

另外,如果您真的有一组字符串要进行比较,那么您可能需要

 final Set<String> validStrings = ...

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

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

0

我知道这个问题很老了,但我认为StringUtils更适合这个问题。

StringUtils.isAnyEmpty(String... args)

或者

StringUtils.isAnyBlank(String... args)

希望这能帮助到某些人!

文档,在这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接