Лучший способ проверить несколько полей в JAVA? - PullRequest
3 голосов
/ 01 апреля 2011

Привет У меня есть много полей, которые мне нужно проверить для 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 ]

11 голосов
/ 01 апреля 2011

Вы должны написать метод, например ниже ;;

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);
2 голосов
/ 01 апреля 2011

Не уверен насчет наилучшей практики, но вы можете привести в порядок свой код:

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
}

Возможно, вы могли бы использовать Список, чтобы сделать его еще лучше.

РЕДАКТИРОВАТЬ

Да, как говорит Питер, используя 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");
2 голосов
/ 01 апреля 2011

По крайней мере, вы можете оптимизировать:

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

до

StringUtils.isBlank(string1);

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

1 голос
/ 01 апреля 2011

Во-первых, string.equals (null) никогда не бывает верным. is string is null это вызовет исключение NullPointerException.

Вы можете использовать string == null || string.equals("")

Проблема в том, что у вас есть много полей / переменных, которые вы хотите обработать в общем, но у вас есть разные имена. Альтернативой является использование массива или списка

String[] strings = { .... }
boolean notAllSet = false;
for(String s: strings)
   notAllSet |= s==null || s.equals("");
1 голос
/ 01 апреля 2011

Создайте метод проверки для обработки каждого из них.

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

Затем вы можете вызвать этот метод для каждой из ваших строк.Обратите внимание, что если вы используете более раннюю версию Java, чем 1.6, вы можете заменить метод isEmpty() на !parameter.equals("")

1 голос
/ 01 апреля 2011

string.equals(null) никогда бы не сработало, так как если бы строка была нулевой, вы бы получили NPE. Я думаю, вы имеете в виду string == null.

Тем не менее, вы можете использовать Apache Commons Lang's StringUtils, который уменьшит проверку до StringUtils.isEmpty(string) || ...

0 голосов
/ 29 июня 2019

Я знаю, что вопрос очень старый, но я считаю StringUtils более подходящим для этого.

StringUtils.isAnyEmpty(String... args)

или

StringUtils.isAnyBlank(String... args)

Надеюсь, это кому-нибудь поможет!

Документы, здесь

0 голосов
/ 01 апреля 2011

Когда вы обрабатываете много переменных одного типа, вы можете управлять ими в структуре, такой как 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 голосов
/ 01 апреля 2011

С одной стороны, лучшая практика - вместо этого делать

 "FOO".equals(myString)

.Это уменьшает вероятность появления NPE и проясняет, что мутации не происходит.Для обсуждения этого см. здесь .

Кроме того, если у вас действительно есть набор строк для сравнения, вы, вероятно, захотите

 final Set<String> validStrings = ...

 boolean validate(final String foo) {
    return foo!=null && validStrings.contains(foo);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...