不使用Regex验证Java密码

ezykj2lf  于 2024-01-05  发布在  Java
关注(0)|答案(2)|浏览(130)

我对Java非常陌生,并且已经练习了好几天了。这个练习的目标是在不使用正则表达式的情况下验证密码。
本练习的要求是:通过控制台,要求用户按照以下要求创建密码。密码必须包含:○至少一个小写字母○至少一个小写字母 ○至少7个字符○至少12个字符 * ○感叹号:! ●如果用户满足所有要求,则将字符串“Password valid and accepted”打印到控制台●如果密码不满足任何要求,则打印字符串“Error“。
我的问题是,我不能得到设置的最大和最小长度的密码要求为7分钟和12最大。我也有麻烦添加“!”作为密码要求。有人可以请指导我在正确的方向?

  1. Via the console, ask the user to create a password with the following requirements.

字符串
密码必须包含:○至少一个密码字母○至少一个密码字母○最少7个字符○最多12个字符○感叹号:!●如果用户满足所有要求,则将字符串“Password valid and accepted”打印到控制台●如果密码不满足任何要求,则打印字符串“Error“。

  1. import java.util.Scanner;
  2. public class WhatToEat {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. /*
  6. * At Least One Lower case
  7. * At Least one Upper case
  8. * At least 7 Characters minimum
  9. * At least 12 characters maximum
  10. * Exclamation mark required
  11. */
  12. final int MIN_LENGTH = 7;
  13. final int MAX_LENGTH = 12;
  14. final int NUM_UPPER_LETTERS = 1;
  15. final int NUM_LOWER_LETTERS = 1;
  16. final int NUM_DIGITS =0;
  17. int minLength = 0;
  18. int maxLength = 0;
  19. int upperCount = 0;
  20. int lowerCount = 0;
  21. int digitCount = 0;
  22. try (Scanner in = new Scanner(System.in)) {
  23. System.out.print("Enter Password Here:");
  24. String input = in.nextLine();
  25. int inputLen = input.length();
  26. for (int i = 0; i < inputLen; i++) {
  27. char ch = input.charAt(i);
  28. if (Character.isUpperCase(ch))
  29. upperCount++;
  30. else if (Character.isLowerCase(ch))
  31. lowerCount++;
  32. else if (Character.isDigit(ch))
  33. digitCount++;
  34. else if (Character.isDigit(ch))
  35. minLength++;
  36. else if (Character.isDigit(ch))
  37. maxLength++;
  38. }
  39. }
  40. if(upperCount <= NUM_UPPER_LETTERS
  41. && lowerCount <= NUM_LOWER_LETTERS
  42. && digitCount <= NUM_DIGITS
  43. && minLength <= MIN_LENGTH
  44. && maxLength <= MAX_LENGTH)
  45. System.out.println("Password valid and accepted");
  46. else {
  47. System.out.println("Error");

jyztefdp

jyztefdp1#

这最后一个IF-Else部分需要修改如下:我添加了“!”检查,也关于最小值和最大值,它应该与密码字符串长度进行比较,以检查密码是否在范围内,就像我做的那样,你应该删除最后两个Else-IF

  1. if(upperCount <= NUM_UPPER_LETTERS
  2. && lowerCount <= NUM_LOWER_LETTERS
  3. && digitCount <= NUM_DIGITS
  4. && inputLen >= MIN_LENGTH
  5. && inputLen <= MAX_LENGTH
  6. && input.contains("!"))
  7. System.out.println("Password valid and accepted");
  8. else {
  9. System.out.println("Error");

字符串

goucqfw6

goucqfw62#

你也应该改变这个

  1. if(upperCount <= NUM_UPPER_LETTERS
  2. && lowerCount <= NUM_LOWER_LETTERS
  3. && digitCount <= NUM_DIGITS
  4. && minLength <= MIN_LENGTH
  5. && maxLength <= MAX_LENGTH)
  6. System.out.println("Password valid and accepted");

字符串

  1. if(upperCount <= NUM_UPPER_LETTERS
  2. && lowerCount >= NUM_LOWER_LETTERS
  3. && minLength >= MIN_LENGTH
  4. && maxLength <= MAX_LENGTH)
  5. System.out.println("Password valid and accepted");


当你希望你的lowerCount和minLength高于最小值,只有maxLength和upperCount低于你的硬限制时。我不确定这个条件,因为你没有提到你需要的最小位数“&& digitCount >= NUM_DIGITS”,但值得考虑。

展开查看全部

相关问题