Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在一个if语句中使用多个OR条件是否正确,备选方案是什么?_Java_If Statement_Conditional - Fatal编程技术网

Java 在一个if语句中使用多个OR条件是否正确,备选方案是什么?

Java 在一个if语句中使用多个OR条件是否正确,备选方案是什么?,java,if-statement,conditional,Java,If Statement,Conditional,我想知道哪种方法更适合、更有效地实现以下功能:检查字段中是否输入了文本 if(text1.equals("") || text2.equals("") || text3.equals("") || text4.equals("")) { //Do Stuff } 我可以看到有两个以上的字段会很快变得混乱,我想知道这是一种正确的方法,还是存在替代方法?您可以这样做: if (Arrays.asList(text1, text2, etc).contains("")) 但更好的解决方案取决于

我想知道哪种方法更适合、更有效地实现以下功能:检查字段中是否输入了文本

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

我可以看到有两个以上的字段会很快变得混乱,我想知道这是一种正确的方法,还是存在替代方法?

您可以这样做:

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

您可以这样做:

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))
当然是聪明的,减少了代码行。然而,当我浏览这段代码时,我觉得有些意思已经消失了

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

要么编写自己的验证方法,要么使用类似ApacheCommonsLang类的东西。然后,您的代码将类似于:

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
我认为这很容易阅读,这是胜利的一半。

当然很聪明,减少了代码行数。然而,当我浏览这段代码时,我觉得有些意思已经消失了

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

要么编写自己的验证方法,要么使用类似ApacheCommonsLang类的东西。然后,您的代码将类似于:

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


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

一个案例陈述如何?如果你可以将你的字段存储在
列表中
映射中
,那么只需循环即可。然后使用Java8,您可以
stream()
该集合并使用lambda。在不了解代码的一般结构的情况下,我们无法推荐您可以进行哪些更改来简化代码。旁注:最好使用
“”.equals(text1)
(依此类推),以避免
NullPointerException
s:)如果您使用Java 6+,则可以使用
text1.isEmpty()
。。。这并不能回答您的问题。@反斜杠如何更好?case语句如何?如果您可以将字段存储在
列表
映射
中,则只需循环即可。然后使用Java8,您可以
stream()
该集合并使用lambda。在不了解代码的一般结构的情况下,我们无法推荐您可以进行哪些更改来简化代码。旁注:最好使用
“”.equals(text1)
(依此类推),以避免
NullPointerException
s:)如果您使用Java 6+,则可以使用
text1.isEmpty()
。。。这并不是回答你的问题。@反斜杠怎么会更好?简洁的解决方案。在OP恐慌之前,也许我要指出,由于代码速度稍慢,不太可能出现任何问题。我不想在这里鼓励任何过早的优化:-)我测试了代码,并能够通过在字段中输入空格来绕过检查,我知道这并不完全是我的问题所说的,但是有没有办法检查输入的文本不仅仅是空的还是空的?或者使用JDK 8:
Stream.of(text1,text2,text3)。anyMath(text->text.isEmpty())
@EdwinDalorzo我不喜欢Java 8示例让我觉得需要再次学习该语言:-D@EdwinDalorzo
anyMath
是正确的还是应该是
anyMatch
?这是一个很好的解决方案。在OP恐慌之前,也许我会指出,由于代码速度稍慢,所以不太可能出现任何问题。你认为呢在这里,我不想鼓励任何过早的优化:-)我测试了代码,并能够通过在字段中输入空格来绕过检查,我知道这并不完全是我的问题所说的,但是有没有办法检查输入的文本不仅仅是空的还是空的?或者使用JDK 8:
Stream.of(text1,text2,text3)。anyMath(text->text.isEmpty())
@EdwinDalorzo我不喜欢Java 8示例让我觉得需要再次学习该语言:-D@EdwinDalorzo是
anyMath
正确还是应该是
anyMatch