gpt4 book ai didi

java - 无法从文件中读取用户名

转载 作者:行者123 更新时间:2023-12-01 17:58:02 25 4
gpt4 key购买 nike

我正在尝试实现一个仅包含用户名密码和电子邮件的注册面板。我将所有用户名和密码放在文本文件“usernames.txt”中。但如果用户单击提交按钮并且用户名已经存在,则我的问题无法正常工作(它应该显示 JOptionPane 并带有文本“用户名已存在!”)。这是我的代码:

submitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("usernames.txt"));
} catch (FileNotFoundException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
try {
String line = br.readLine();
StringBuilder sb = new StringBuilder();
Pattern usernameAndPasswordPattern = Pattern.compile("^(\\S+) (\\S+)$");
while (line != null) {
sb.append(line); //
sb.append(System.lineSeparator()); //
line = br.readLine();
}
String everything = sb.toString();
Matcher userNameAndPasswordMatcher = usernameAndPasswordPattern.matcher(everything);

//if username exists!
while (userNameAndPasswordMatcher.matches()) {
String username = userNameAndPasswordMatcher.group(1);
String password = userNameAndPasswordMatcher.group(2);

if (username.equals(usernameTextField.getText())) {
int result = JOptionPane.showConfirmDialog(null, "Username already exists!", "Registration incomplete", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE);
}
}

} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
});

在这里您可以看到我面板上的图片

enter image description here

最佳答案

您说文件中的行由用户名和密码组成。然而您正在测试这样的匹配:

boolean matches = Pattern.matches(""+usernameTextField.getText(), line);  

上述问题。

  1. PatternMatchermatch 动词表示“它匹配整个字符串”。

    <
  2. Pattern.matches(String, String) 的第一个参数应该是表示为字符串的正则表达式,而不仅仅是任何旧字符串。现在,如果您的用户名字母受到适当的限制,则可以使用该名称作为正则表达式。但这是个坏主意。

  3. 即使将“匹配”更改为“查找”,您仍然可能使提供的用户名与文件中的密码或用户名的部分相匹配。 p>

断章取义(即忽略第 3 点),最好像这样进行匹配:

boolean matches = line.contains(""+usernameTextField.getText());  

或者也许

boolean matches = Pattern.find(
Pattern.quote(""+usernameTextField.getText()), line);

但是,这仍然存在一个问题,您可能会得到错误的匹配;例如匹配部分用户名...甚至密码。

因此,正确的解决方案是制作一个与文件中的整个用户名字段匹配的正则表达式,或者将行拆分为字段(例如String.split然后使用 String.equals 根据已提供的用户名测试相应的字段。

关于java - 无法从文件中读取用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43114768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com