我的问题是创建一个包含6到10个字符且至少包含一个字母和一个数字的密码,然后让用户重新输入密码并确认它们是否匹配。
我唯一的问题是检查密码是否有字母或数字。我浏览过并在网站上发现了同样的问题,但我对他们在代码中引用的一些方法和其他内容感到困惑,因为我似乎以不同方式构建了我的方法。我想过使用indexOf()方法来查看它是否返回-1值,但我不确定从哪里开始。
我是java的新手,我确信有一种更有效的方法来构建它,我会喜欢任何提示。
import java.util.Scanner;
public class Password
{
public static void main(String[] args)
{
//Input from user
String password;
Scanner input = new Scanner(System.in);
System.out.print("Please create your password: ");
password = input.nextLine();
//Checking password length
while( (password.length() < 6) || (password.length() > 10) )
{
System.out.print("This password must be between 6 and 10 characters. Try again: ");
password = input.nextLine();
}
//Checking to see if passwords contain digit/letter
/*Need to add code here */
//Confirming if passwords match
String password2;
System.out.print("\nPlease type your password again to confirm: ");
password2 = input.nextLine();
while( !password2.equals(password) )
{
System.out.print("Those passwords do not match. Try again: ");
password2 = input.nextLine();
}
}
}
答案 0 :(得分:2)
您应该使用正则表达式来检查theese crits。
首先,代码:
pwd.matches("^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{6,10}$")
以下是一个完整的例子:
public class HelloWorld{
public static void main(String []args){
String password = "aA2";
String regexp = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{6,10}$";
System.out.println(password.matches(regexp));
password = "12345678";
System.out.println(password.matches(regexp));
password = "aA345678";
System.out.println(password.matches(regexp));
}
}
给出以下输出:
false
false
true
正则表达式匹配任何字符串,至少包含大写字母,一个小写字母和一个数字,以及6-10个字符长。
你可以找到更多关于theese here的例子。以及有关Wikipedia上的正则表达式的一些信息。有关正则表达式和Java的非常好的教程可以在Vogella找到。 (这是一个非常好的网站,我认为有非常好的教程!)并且,一个方便的工具来显示正则表达式匹配的内容:http://www.regexper.com/
如果是上一个例子,它会给你一个非常直观的output。
所以,如果你不能使用Regulax表达式,我会创建一个函数,如果密码正常则返回true
,在任何其他情况下都返回false。以下是此功能的一个小例子:
public static boolean passwordOk(String password){
if (password == null) return false;
if (password.length() < 6 || password.length() > 10) return false;
boolean containsUpperCase = false;
boolean containsLowerCase = false;
boolean containsDigit = false;
for(char ch: password.toCharArray()){
if(Character.isUpperCase(ch)) containsUpperCase = true;
if(Character.isLowerCase(ch)) containsLowerCase = true;
if(Character.isDigit(ch)) containsDigit = true;
}
return containsUpperCase && containsLowerCase && containsDigit;
}
此解决方案中的主要思想是for-each loop
。我从character array
创建了一个String
,然后遍历它的元素。如果当前字符是数字,或大写或小写,我设置一个标志,以签名,其中一个语句为真。一开始,所有的陈述都是假的,最后我会返回他们总和的结果。
在我检查的前两行中,如果参数不为null,并且它是否具有正确的长度。
我希望,在此之后你将能够解决你的功课!您甚至可以使用null
指针调用此函数,因此我将创建一个while
循环,以便在此函数不返回true
时运行。
如果没有希望,解决这个问题,here's完整的代码 相信我,如果你想先自己解决这个问题,那将会更有用!
答案 1 :(得分:0)
你可以使用这样的东西......
if( password.matches(".*[a-zA-Z]+.*")){
System.out.println( "Has characters ");
} else {
System.out.println("Ok");
}
这是为了检查密码是否包含字母
同样,您可以使用正则表达式".*[0-9]+.*"
来检查密码是否包含数字。