【发布时间】:2021-09-15 15:37:27
【问题描述】:
我有一个问题。我的目标是设置密码;密码必须由两个小写字母和 0-9 的 8 位数字组成。我已经使用正则表达式为此编写了一个代码,但问题是它超过了密码必须为 10 的总数,但我这里的代码实际上并不匹配。
这是我的代码:
System.out.print("Password: ");
Scanner pass=new Scanner(System.in);
String password=pass.next();
String password_regex="(?=.*[0-9])(?=.*[a-z])(?=\\S+$).{8,}";
boolean password_result=password.matches(password_regex);
if(password_result){
【问题讨论】:
-
为什么必须在一个正则表达式中完成所有操作?有很多更清洁的方法可以做到这一点。喜欢
password.codePoints().filter(Character::isLetter).count() == 2 && password.codePoints().filter(Character::isDigit).count() == 8。 -
我真的很抱歉,这是我认为我可以做到但失败的一种方式。真的很抱歉......使用过滤器可以帮助我解决这个问题吗?
-
无需道歉。我只是想建议正则表达式不是检查所需字符是否存在的唯一方法。我的建议使用a stream of the password’s characters,您可以过滤 IntStream。然后
count()将仅返回通过过滤器的字符数。