2011-04-01 87 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; 
} 
相關問題