如何有效地检查两个字符串是否相同以及它们中的非字符串是否为空

时间:2014-09-05 07:25:12

标签: java string passwords textfield

我认为这是一种更长,更乏味,更低效的检查方式:

  • 密码字段不为空
  • 两个密码都匹配
  • 两个密码都不一样

private void checkPasswordSame() {
        String first = password1.getText();
        String second = password2.getText();
        if (first.equals("")) {
            System.out.println("Password can't be empty");

            if ("".equals(second)) {
                System.out.println("Second password is empty");
            }
        } else if (first.equals(second)) {
            System.out.println("Passwords same");
        } else {
            System.out.println("Passwords not the same");
        }

}

有没有办法可以用更少的行来做到这一点?

4 个答案:

答案 0 :(得分:2)

如果您不关心哪个字段为空,因为两者都必须填写,您可以稍微简化空白检查:

private void checkPasswordSame() {
    String first = password1.getText();
    String second = password2.getText();
    if (first.equals("") || second.equals("")) {
        System.out.println("Both password can't be empty");
    } else if (first.equals(second)) {
        System.out.println("Passwords same");
    } else {
        System.out.println("Passwords not the same");
    }
}

尽量不要专注于代码长度,这不是高尔夫编程;而是专注于代码可读性。如果它至少没有提供评论来解释这个棘手的部分,那么你所做的事应该对另一位读者来说应该是显而易见的。

作为一种风格问题,我更喜欢在处理正常情况之前先检查错误,但这取决于你:

private void checkPasswordSame() {
    String first = password1.getText();
    String second = password2.getText();
    if (first.equals("") || second.equals("")) {
        System.out.println("Both password can't be empty");
    } else if (!first.equals(second)) {
        System.out.println("Passwords not the same");
    }
    else {
        System.out.println("Passwords same");
    }
}

答案 1 :(得分:0)

你云离开这些界限:

        if ("".equals(second)) {
            System.out.println("Second password is empty");
        }

如果第一个密码不为空,但第二个密码是用户将获得“密码不一样” - 在这种情况下,我认为这是一个真实而充分的信息。

答案 2 :(得分:0)

您可以切换检查方式: 1.匹配。 2.不空。

if (first.equals(second)) 
{
    //check one is enough
    if(first == null || first.isEmpty())
    {
        System.out.println("Password can't be empty");
    }
    else
    {
        System.out.println("Passwords same");
    }
} 
else
{
    System.out.println("Passwords not the same");
}

答案 3 :(得分:0)

有效并不意味着更少的代码行。 您确定要使用代码行数较少的方法吗?或者你想要一个更快的方法? 下面你有一个更快的方法。

    private void checkPasswordSame() {

      final String first = password1.getText();
      final String second = password2.getText();

      final boolean firstIsEmpty = first.isEmpty();
      final boolean secondIsEmpty = second.isEmpty();

      if (firstIsEmpty) {
        System.out.println("Password can't be empty");
      }

      if (secondIsEmpty) {
        System.out.println("Second password is empty");
      }

      if (!firstIsEmpty && !secondIsEmpty) {

        if (first.equals(second)) {
          System.out.println("Passwords same");
        } else {
          System.out.println("Passwords not the same");
        }
      }
    }

注意:

  1. 使用 #isEmpty()方法更快
  2. 你可能想知道第二个密码是否为空,即使第一个密码为空(这就是为什么我没有在第一个密码中包含第二个如果