我希望程序能做两件事:
这是我的代码:
import java.util.*;
class howstrong
{
public static void main(String ar[])
{
String password;
int i;
int c=0;
Scanner in = new Scanner(System.in);
System.out.println("ENTER PASSWORD");
password = in.next();
if (password.length() <= 8)
{
for (i = 0; i <= password.length(); i++)
{
char x = password.charAt(i);
if (Character.isLetter(x))
{
if (Character.isDigit(x))
c = 1;
}
}
if (c == 1)
System.out.println("STRONG");
else
System.out.println("NOT STRONG");
}
else
System.out.println("HAVE AT LEAST 8 CHARACTERS");
}
}
答案 0 :(得分:5)
您有几个问题:
i <= password.length()
应为i < password.length()
if (password.length() <= 8)
应为if (password.length() >= 8)
您正在检查字符是否同时是字母和数字。
最后,我建议使用两个标志,一个用于检测是否有字母,另一个用于检测是否有数字。
全部放在一起:
import java.util.Scanner;
class howstrong {
public static void main(final String ar[]) {
String password;
Scanner in = new Scanner(System.in);
System.out.println("ENTER PASSWORD");
password = in.next();
boolean hasLetter = false;
boolean hasDigit = false;
if (password.length() >= 8) {
for (int i = 0; i < password.length(); i++) {
char x = password.charAt(i);
if (Character.isLetter(x)) {
hasLetter = true;
}
else if (Character.isDigit(x)) {
hasDigit = true;
}
// no need to check further, break the loop
if(hasLetter && hasDigit){
break;
}
}
if (hasLetter && hasDigit) {
System.out.println("STRONG");
} else {
System.out.println("NOT STRONG");
}
} else {
System.out.println("HAVE AT LEAST 8 CHARACTERS");
}
}
}
答案 1 :(得分:3)
有一个Regex表达式可用于检查密码强度。您可以添加一个验证方法来检查密码是否与表达式匹配: 所以你在代码中调用这个方法就像这样:
password = in.next();
if(isStrong(password){
//good password, do stuff
}
else{
//not so good, prompt again
}
方法如下:
private boolean isStrong(String password){
return password.matches("^(?=.*[A-Z].*[A-Z])(?=.*[!@#$&*])(?=.*[0-9].*[0-9])(?=.*[a-z].*[a-z].*[a-z])");
}
以下是可用于检查密码强度的正则表达式。
^(?=.*[A-Z].*[A-Z])(?=.*[!@#$&*])(?=.*[0-9].*[0-9])(?=.*[a-z].*[a-z].*[a-z]).{8}$
您可以查看原始帖子和所选答案here。
答案 2 :(得分:0)
在你的循环中,检查你的角色是否是一个字母和。所以c
永远不会被设置为1.我建议您学习使用调试器,它将帮助您轻松解决此类错误。
答案 3 :(得分:0)
我不知道,因为它没有指定,是您只是出于锻炼目的还是需要在现实应用中实现?
在第二种情况下,建议您使用现有的库来检查密码是否足够强。
选中zxcvbn Java version on github,这是Dropbox提供的库的移植。