密码输入校验

题目描述
给定用户密码输入流 input,输入流中字符 ‘<’ 表示退格,可以清除前一个输入的字符,请你编写程序,输出最终得到的密码字符,并判断密码是否满足如下的密码安全要求。

密码安全要求如下:

密码长度 ≥ 8;
密码至少需要包含 1 个大写字母;
密码至少需要包含 1 个小写字母;
密码至少需要包含 1 个数字;
密码至少需要包含 1 个字母和数字以外的非空白特殊字符;
注意空串退格后仍然为空串,且用户输入的字符串不包含 ‘<’ 字符和空白字符。

输入描述
用一行字符串表示输入的用户数据,输入的字符串中 ‘<’ 字符标识退格,用户输入的字符串不包含空白字符,例如:

ABC<c89%000<

输出描述
输出经过程序处理后,输出的实际密码字符串,并输出改密码字符串是否满足密码安全要求。两者间由 ‘,’ 分隔, 例如:

ABc89%00,true

import java.util.LinkedList;
import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String s = sc.nextLine();

    LinkedList<Character> stack = new LinkedList<>();

    for (int i = 0; i < s.length(); i++) {
      char c = s.charAt(i);

      if (c == '<') {
        if (stack.isEmpty()) continue;
        stack.removeLast();
      } else {
        stack.addLast(c);
      }
    }

    int upper = 0;
    int lower = 0;
    int number = 0;
    int non_letter_number = 0;

    StringBuilder password = new StringBuilder();
    for (Character c : stack) {
      password.append(c);

      if (c >= 'a' && c <= 'z') {
        lower++;
      } else if (c >= 'A' && c <= 'Z') {
        upper++;
      } else if (c >= '0' && c <= '9') {
        number++;
      } else {
        non_letter_number++;
      }
    }

    if (password.length() >= 8
        && lower >= 1
        && upper >= 1
        && number >= 1
        && non_letter_number >= 1) {
      password.append(",true");
    } else {
      password.append(",false");
    }

    System.out.println(password);
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值