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

Java 如何在.txt文件中搜索字符串和哈希代码?(爪哇),java,java.util.scanner,bufferedreader,equals,readfile,Java,Java.util.scanner,Bufferedreader,Equals,Readfile,提示:我正在编写一个登录程序,要求用户输入用户名和密码。所有用户信息都存储在password.txt文件中,密码存储为哈希代码。如果用户输入的用户名无效或密码与条目中的哈希值不同,则程序应打印“登录失败”。如果用户输入的用户名有效且密码与条目中的哈希值相同,则程序应打印“登录成功” password.txt文件的设置如下: Real name:username:password_hash 问题:如何在.txt中搜索字符串和哈希代码? 这是我目前拥有的代码: public static v

提示:我正在编写一个登录程序,要求用户输入用户名和密码。所有用户信息都存储在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!");

                    }
            }
我试图在代码中搜索类似username:hashcodePassword的字符串

问题:代码既不打印if语句,也不打印if语句,在运行程序时出现此错误

错误:

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!");
                }
        }

然后,如果您需要更多if语句,您可以使用currentLine变量,而不是读取另一行文件。

将任务分解为几个小步骤,然后尝试一次一个地解决每个步骤--分而治之将帮助您成功。例如,尝试使用缓冲区简单地读取和打印文本文件eReader,并使用通过搜索和学习教程获得的帮助。其他步骤也一样。当您陷入更具体的步骤时,在您学习了相应的教程并尝试应用它们之后,您应该在此处提出更具体的问题。