【问题标题】:Making a password checker in XML (Android Studio)在 XML 中制作密码检查器(Android Studio)
【发布时间】:2022-10-24 22:18:30
【问题描述】:

所以我是 XML/Android 的初学者,并试图在 Android Studio 中制作密码检查器。从逻辑上和句法上讲,这似乎对我有用,但它只调用第一个 Toast,无论密码中是否有大写字母。

boolean checkPasswordComplexity(String pw) {
  boolean foundUpperCase, foundLowerCase, foundNumber, foundSpecial;
  foundUpperCase = foundLowerCase = foundNumber = foundSpecial = false;
  char c = 0;

  for (int i = 0; i < pw.length(); i++) {
    c = pw.charAt(i);
    if(!Character.isUpperCase(c)) {
      Toast.makeText(getApplicationContext(),"Missing an upper case letter!", Toast.LENGTH_LONG).show();
      return false;
    } else if (!Character.isLowerCase(c)) {
      Toast.makeText(getApplicationContext(),"Missing a lower case letter!", Toast.LENGTH_LONG).show();
      return false;
    } else if (!Character.isDigit(c)) {
      Toast.makeText(getApplicationContext(),"Missing a number!", Toast.LENGTH_LONG).show();
      return false;
    } else if (!isSpecialCharacter(c)) {
      Toast.makeText(getApplicationContext(),"Missing a special character", Toast.LENGTH_LONG).show();
      return false;
    } else {
      return true;
    }
  }
  return true;
}

【问题讨论】:

  • XML 是如何涉及的?
  • 我越看代码越困惑。它当前迭代一次并忽略“累积”标志 (foundXxx)。如果找到 char 类型,您的意思是设置适当的标志true,然后最后确保所有标志都是true

标签: java android-studio


【解决方案1】:

您正在遍历一个字符串并在每个字符上执行这些检查。这实际上意味着您将始终至少有一个错误,因为单个字符不可能是大写、小写、数字和特殊字符。 您正在从第一个字符的 for 循环中返回。所以你所有的代码检查都是第一个字符。

您需要做的是在循环内设置标志,并在循环外进行评估。

对现有代码进行一个小的重构,这应该可以工作。 这将为单个问题显示单个 Toast。

boolean checkPasswordComplexity(final String pw) {
    boolean foundUpperCase, foundLowerCase, foundNumber, foundSpecial;
    foundUpperCase = foundLowerCase = foundNumber = foundSpecial = false;
    for (int i = 0; i < pw.length(); i++) {
        final char c = pw.charAt(i);
        if (Character.isUpperCase(c)) {
            foundUpperCase = true;
        } else if (Character.isLowerCase(c)) {
            foundLowerCase = true;
        } else if (Character.isDigit(c)) {
            foundNumber = true;
        } else if (isSpecialCharacter(c)) {
            foundSpecial = true;
        }
    }
    if (!foundUpperCase) {
        Toast.makeText(getApplicationContext(), "Missing an upper case letter!", Toast.LENGTH_LONG).show();
    } else if (!foundLowerCase) {
        Toast.makeText(getApplicationContext(), "Missing a lower case letter!", Toast.LENGTH_LONG).show();
    } else if (!foundNumber) {
        Toast.makeText(getApplicationContext(), "Missing a number!", Toast.LENGTH_LONG).show();
    } else if (!foundSpecial) {
        Toast.makeText(getApplicationContext(), "Missing a special character", Toast.LENGTH_LONG).show();
    }
    return foundSpecial && foundNumber && foundLowerCase && foundUpperCase;
}

【讨论】:

    猜你喜欢
    • 2011-02-03
    • 2018-03-19
    • 2012-11-26
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    相关资源
    最近更新 更多