Правильно ли использовать несколько условий OR в одном операторе if, каковы альтернативы?

1

Я хотел бы знать, какой способ более подходит и эффективен в достижении чего-то вроде: проверки наличия текста в поле

if(text1.equals("") || text2.equals("") || text3.equals("") || text4.equals("")) {
  //Do Stuff
}

Я вижу, как это быстро становится беспорядочным с более чем двумя полями, и хотелось бы знать, правильно ли это это сделать или существуют альтернативы?

Теги:
if-statement
conditional

2 ответа

7
Лучший ответ

Вы можете сделать что-то вроде этого:

if (Arrays.asList(text1, text2, etc).contains(""))

Но лучшее решение будет зависеть от контекста.

Обратите внимание, что это немного медленнее, чем ваш текущий код. Если вы не выполняете этот тест на bazillion раз в секунду, тем не менее, это не имеет значения.


EDIT, поскольку в комментариях было сказано, что строки с пробелами также должны удовлетворять условию... Вот так:

private static final Pattern PATTERN = Pattern.compile("\\s*");

private static boolean emptyOrSpacesOnly(final String... strings)
{
    for (final String s: strings)
        if (PATTERN.matcher(s).matches())
            return true;
    return false;
}

Затем в коде:

if (emptyOrSpacesOnly(text1, text2, etc))
  • 0
    Чистое решение. Перед OP паникой, возможно , я укажу , что это очень маловероятно , что будет никаких проблем в связи с кодом будучи незначительно медленнее. Не хочу поощрять преждевременную оптимизацию здесь :-)
  • 0
    Я проверил код и смог обойти проверку, введя пробелы в полях, я знаю, что это не совсем то, что указано в моем вопросе, но есть ли способ проверить, что введенный текст был не просто пустым или пробелом?
Показать ещё 5 комментариев
2

Решение fge, безусловно, умное и сокращает строки кода. Тем не менее, я чувствую, что некоторые значения теряются при взгляде на этот фрагмент кода.

Я бы посоветовал вам использовать читаемый код, даже если он немного более подробный. Мое решение состояло бы в том, чтобы проверить эти предварительные условия перед началом метода. Если предварительное условие терпит неудачу, выбросьте исключение.

Либо напишите свои собственные методы проверки, либо используйте что-то вроде Apache Commons Lang Validate. Тогда ваш код будет выглядеть примерно так:

Validate.notEmpty(text1, "error message");
Validate.notEmpty(text2, "error message");
Validate.notEmpty(text3, "error message");
Validate.notEmpty(text4, "error message");

// This line is only reached if all fields are non-empty

Я думаю, что это легко читать, что составляет половину битвы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню