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@EdwinDalorzoanyMath
是正确的还是应该是anyMatch
?这是一个很好的解决方案。在OP恐慌之前,也许我会指出,由于代码速度稍慢,所以不太可能出现任何问题。你认为呢在这里,我不想鼓励任何过早的优化:-)我测试了代码,并能够通过在字段中输入空格来绕过检查,我知道这并不完全是我的问题所说的,但是有没有办法检查输入的文本不仅仅是空的还是空的?或者使用JDK 8:Stream.of(text1,text2,text3)。anyMath(text->text.isEmpty())
@EdwinDalorzo我不喜欢Java 8示例让我觉得需要再次学习该语言:-D@EdwinDalorzo是anyMath
正确还是应该是anyMatch
?