我正在试图创建一个JFrame来检查放置在JTextField中的文本是否与.txt文件中的信息相同。 然后如果这是正确的,它会检查JPasswordField中的信息是否与.txt文件中的信息匹配。为什么我的字符串检查代码不工作
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == button)
{
if(!username.getText().equals("") && passIsGood())
{
try
{
Scanner reader = new Scanner(new File("users.txt"));
reader.useDelimiter("\t|\n");
reader.nextLine();
while(reader.hasNextLine())
{
if(reader.next().equals(username.getText()))
{
//Username is correct, now checks for password:
System.out.println("Username passed");
if(reader.next().equals(passToString()))
{
//Username & Password are correct
System.out.println("Password passed");
break;
}
} else if(!reader.hasNextLine())
{
wrongInfo();
} else
{
reader.nextLine();
}
}
reader.close();
frame.dispose();
} catch(Exception ex)
{
JOptionPane.showMessageDialog(null, ex);
}
} else
{
JOptionPane.showMessageDialog(null, "Please enter a valid Username and Password");
}
}
}
private static String passToString()
{
String passString = new String(password.getPassword());
return passString;
}
我得到尽可能的用户名路过,但我觉得像.equals(passToString())可能是造成问题的原因。 文本文件看起来像这样: 用户名密码 测试thetest test2的thetest3
注意,在每个字段之间的空间是使用标签,因此我的分隔符(“\ t | \ n”);
users.txt中的每个第二个字段后是一个新行 – Otanan
为什么你需要在顶部调用reader.nextLine()? – sasankad
@sasankad我的.txt文件的第一行是用于格式化的,它说“用户名密码”作为第一行来表示如何写出其余的内容,我想忽略它 – Otanan