【问题标题】:Password Check Program - checking capitals, lowercase letters, digit and special character密码检查程序 - 检查大写、小写字母、数字和特殊字符
【发布时间】:2016-03-02 03:17:52
【问题描述】:

我有一个任务要求我创建一个密码检查程序。

密码必须至少为 8 个字符,包含大小写字母、数字和特殊字符。

我相信我已经接近解决这个问题了,但我的技能仍在发展中,我已经碰壁了。

package project1;

/**
 *
 * @author danechristian
 */
import java.util.*;
public class Project1 
{
    static Scanner console = new Scanner(System.in);
    static final String SPECIAL_CHARACTERS = "!,#,$,%,^,&,*,|";
    static String password;

    public static void main(String[] args) 
    {

        System.out.println("Create a password: ");
        password = console.next();

        if (validPassword(password))
        {
            System.out.println("Password Saved");
        }
        else
        {
            System.out.println("Invalid Passowrd. Password "
                    + "must contain atleast 1 capital letter"
                    + "1 lower case letter, 1 digit, 1"
                    + "special character (!#$%^&*|) and "
                    + "be atleast 8 characters long");
        }
    }

public static boolean validPassword(String password)
    {
        boolean upCase = false;
        boolean loCase = false;
        boolean isDigit = false;
        boolean spChar = false;

        if (password.length() >= 8)
           {
            for (int i = 0; i < password.length() - 1; i++)
               {
                if (Character.isUpperCase(password.charAt(i)))
                {
                    upCase = true;
                }

                if (Character.isLowerCase(password.charAt(i)))
                {
                    loCase = true;
                }

                if (Character.isDigit(password.charAt(i)))
                {
                    isDigit = true;
                }

                if (SPECIAL_CHARACTERS.contains(password))
                {
                    spChar = true;
                }
               } 
           }         
        return (upCase && loCase && isDigit && spChar);
    }   

}

【问题讨论】:

  • 你有什么问题?
  • 你不能只使用正则表达式吗?
  • 我不知道你在哪里碰到了这个问题,因为对我来说一切都很简单明了。因此,我无法看到您的问题。请解释它在哪里。
  • 不计算大写字母小写字母数字或特殊字符。不熟悉正则表达式。
  • 将密码存储在字符串中是不好的做法。应该使用 char[] 作为初学者。字符串是不可变的,这意味着当您完成密码时,密码将位于 RAM 中。

标签: java passwords verify


【解决方案1】:

为了检查有这样的东西:

public static boolean validPassword(String password){
        boolean upCase = false;
        boolean loCase = false;
        boolean isDigit = false;
        boolean spChar = false;
     if (password.length()>7){
          if (password.matches(".+[A-Z].+")){
              upCase = true;
          }
          if (password.matches(".+[a-z].+")){
              loCase = true;
          }
          if (password.matches(".+[1-9].+")){
              isDigit = true;
          }
          if (SPECIAL_CHARACTERS.contains(password)){
               spChar = true;
          }
     }
  return (upCase && loCase && isDigit && spChar);
} 

【讨论】:

【解决方案2】:

通过改变解决

如果(SPECIAL_CHARACTERS.contains(密码)){ spChar = true;

if (SPECIAL_CHARACTERS.contains(password.substring(i,i+1))){ spChar = true;

这会检查字符串中的字符串。

另外,我从 for 语句中删除了“- 1”,以便边界正确。还从 SPECIAL_CHARACTERS 常量中删除了逗号。

程序现在运行没有问题,感谢大家的建议。

【讨论】:

    猜你喜欢
    • 2013-12-07
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2013-04-14
    相关资源
    最近更新 更多