提示:我正在编写一个登录程序,向用户询问其用户名和密码。所有用户信息都存储在password.txt文件中,并且密码存储为哈希码。如果用户输入与条目中的哈希相同的哈希的无效用户名或密码,则程序应打印"失败的登录"。如果用户输入有效的用户名,并且密码的哈希与条目中的哈希相同,则该程序应打印"登录成功"。
password.txt文件的设置为:
Real name:username:password_hash
问题:如何搜索.txt以查找字符串和哈希码?
这是我现在拥有的代码:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Scanner sf = new Scanner("passwords.txt");
String Username;
String Password;
System.out.println("Login ");
System.out.println("Please Enter Username: ");
Username = sc.next();
System.out.println("Please Enter Password: ");
Password = sc.next();
String login = Username + ":" + Password.hashCode();
System.out.println(login);
while(sf.hasNextLine()){
if((login.equals(sf.nextLine().trim()))){
System.out.println("Login Successful!");
break;
}
if(!(login.equals(sf.nextLine().trim()))){
System.out.println("Login Unsuccessful!");
}
}
我正在尝试搜索看起来像用户名的字符串:hashcodepassword
问题:该代码在运行程序
时不会打印出来,并且会给我这个错误错误:
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1540)
at LoginApplication.main(LoginApplication.java:29)
简单的解释:您的代码检查文件是否具有下一行,因此检查第一个嵌套的 if ,但在这里它读取文件和指向文件的指针移至下一行。然后,它将检查下一个 if语句,此处读取了文件的另一行。出现问题是因为您实际上一次读了两行文件。
解决方案是
while(sf.hasNextLine()) {
final String currentLine = sf.nextLine().trim();
if(login.equals(currentLine)){
System.out.println("Login Successful!");
break;
} else {
System.out.println("Login Unsuccessful!");
}
}
那么,如果您需要更多如果语句,则可以使用 CurrentLine 变量而不是读取其他文件行。