如何搜索.txt文件中的字符串和哈希码?(Java)



提示:我正在编写一个登录程序,向用户询问其用户名和密码。所有用户信息都存储在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 变量而不是读取其他文件行。

最新更新