在一个if语句中使用多个OR条件是否正确,有哪些替代方案?

时间:2014-03-17 16:36:27

标签: java if-statement conditional

我想知道如何更有效和更有效地实现以下内容:检查是否在字段中输入了文本

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

我可以看到超过2个字段如何快速混乱,并想知道这是否是一种正确的方法,或者是否存在替代方案?

2 个答案:

答案 0 :(得分:7)

您可以这样做:

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

但更好的解决方案取决于具体情况。

但请注意,这比您当前的代码慢一点。但是,如果你不是每秒执行那么多次测试,那应该没关系。


编辑,因为在评论中已经了解到只有空格的字符串也应满足条件......这里有:

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))

答案 1 :(得分:2)

fge's solution当然很聪明,减少了代码行。但是,当我看到那段代码时,我觉得有些意思会丢失。

我鼓励你接受可读代码,即使它稍微冗长一点。我的解决方案是在开始一个方法之前测试这些前提条件。如果前置条件失败,则抛出异常。

编写自己的验证方法或使用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

我认为这很容易阅读,这是赢得胜利的一半。