嗨我有很多字段需要验证 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个字符串则更难看。
请告诉我最佳做法。
答案 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