2011-04-01 135 views
0

您好我有我需要验证的和空即“”在JAVA中验证多个字段的最佳方法是什么?

如果我要验证串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个问题已被您问过,没有答案值得您吗? – 2011-04-01 13:09:20

+1

接受你的一些答案,这是上下箭头左边的绿色勾号。 – Blundell 2011-04-01 13:12:52

+0

你发布“值得”的评论,因为你自己值得我接受任何答案。 :)当然,我会去做。 – 2011-04-01 13:31:48

回答

8

你应该写一个方法,如下面;;

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'更好 – 2011-04-01 13:27:13

+1

@Peter Lawrew,应用了推荐的改变。 :) – 2011-04-01 13:29:16

+0

只需要添加一个')'的if语句。 ;) – 2011-04-01 13:34:23

1

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

不过,你可以使用Apache Commons Lang中的StringUtils这将支票减少StringUtils.isEmpty(string) || ...

1

创建一个validate方法来处理每一个。

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

然后你可以为你的每个字符串调用这个方法。需要注意的是,如果你使用的是Java 1.6的早期版本,可以更换isEmpty()!parameter.equals("")

2

至少可以优化:

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

StringUtils.isBlank(string1); 

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

+0

请告诉我关于StringUtils。这是一个系统类还是任何框架类? – 2011-04-01 13:34:26

+0

http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/StringUtils.html – 2011-04-01 13:38:38

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使其更好。

编辑

是彼得说,使用可变参数(这是我应该做更多的时候!)

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循环会使这个更好。 ;) – 2011-04-01 13:11:52

1

首先字符串。等于(null)永远不会是真的。字符串是null,这将抛出NullPointerException。

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

你的问题是,你有很多领域/你想在一个通用的方式来治疗变量,但你有不同的名称。另一种方法是使用数组或列表

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

一两件事,最好的做法是做

"FOO".equals(myString) 

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

此外,如果你真的有一个字符串的集合来比较,你可能想

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; 
} 
相关问题