Java 从arraylist读取以检查它是否包含用户名和密码
我正在创建一个登录页面,从arraylist中的文本文件中读取用户名和密码。然后,它将检查arraylist,查看它是否包含用户名和密码。出于某种原因,我不明白如果它包含它为什么不返回true。我认为问题在于每个索引中有多个字符串,但我不知道如何检查它是否只包含一个字符串。 任何帮助都将不胜感激。它在jframegui中 登录按钮Java 从arraylist读取以检查它是否包含用户名和密码,java,string,arraylist,Java,String,Arraylist,我正在创建一个登录页面,从arraylist中的文本文件中读取用户名和密码。然后,它将检查arraylist,查看它是否包含用户名和密码。出于某种原因,我不明白如果它包含它为什么不返回true。我认为问题在于每个索引中有多个字符串,但我不知道如何检查它是否只包含一个字符串。 任何帮助都将不胜感激。它在jframegui中 登录按钮 private ArrayList<String> users = new ArrayList<String>(); private
private ArrayList<String> users = new ArrayList<String>();
private void loginBtnActionPerformed(java.awt.event.ActionEvent evt) {
username = loginUsernameTxt.getText();
password = String.valueOf(loginPasswordTxt.getPassword());
if (username.equals("") || password.equals("")) {
JOptionPane.showMessageDialog(frame, "No username or password entered.");
} else {
for (int i = 0; i < users.size(); i++) {
if (users.get(i).contains(username) && users.get(i).contains(password)) {
JOptionPane.showMessageDialog(frame, "Login is successful!");
} else {
JOptionPane.showMessageDialog(frame, "Username or password does not match. Please try again.");
}
}
}
}
感谢您迄今为止的解决方案,我觉得哈希映射是正确的方法,但我不知道如何将它们全部添加到其中。
到目前为止,这是我必须添加到arraylist中的内容。
如何将所有用户名和密码添加到哈希映射?
先谢谢你
try {
try (Scanner myScanner = new Scanner(file)) {
while(myScanner.hasNextLine()){
users.add(myScanner.nextLine());
}
myScanner.close();
}
} catch (FileNotFoundException ex) {
Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
}
}
我做到了!
谢谢大家的帮助,每一条评论都非常有用,非常感谢。您使用了错误的数据结构,即,如果您使用列表来存储用户名和密码, 您将无法区分哪个用户设置了密码,也就是说,您无法映射(关联)它们 因此,您需要的是一个
映射
(look),它将数据存储为密钥和值对(如您的用户名和密码),因此您需要使用映射
,而不是列表
,如下所示的带有注释的代码:
//declare a Map key is username and value is password
private Map<String, String> users = new HashMap<>();
private void loginBtnActionPerformed(
java.awt.event.ActionEvent evt) {
username = loginUsernameTxt.getText();
password = String.valueOf(loginPasswordTxt.getPassword());
if (username.equals("") || password.equals("")) {
JOptionPane.showMessageDialog(frame,
"No username or password entered.");
} else {
//retrive the value from Map using get(key)
if (users.get(username) != null &&
users.get(username).equals(password)) {
JOptionPane.showMessageDialog(frame,
"Login is successful!");
} else {
JOptionPane.showMessageDialog(frame,
"Username or password does not match.
Please try again.");
}
}
}
此外,要检查用户名是否已存在:
users.containsKey(username)
如果您使用的是JPasswordField,那么您应该像这样获得密码
/**
* @return the password
*/
public String getPassword() {
String password = null;
if (this.loginPasswordTxt == null) return null;
char[] buffer = this.loginPasswordTxt.getPassword();
password = new String();
for (char c : buffer) {
password += c;
}
return password;
}
您的列表包含用户名和密码很奇怪为什么不使用HashMap
所以这里如果我理解user.get(i)应该是用户名+密码的串联,如果你把
users.add(username)
users.add(password)
if (users.get(i).contains(username) && users.get(i).contains(password)){
// never goes true
}
users.add(username + password)
if (users.get(i).contains(username) && users.get(i).contains(password)){
// should be good
break;
}
最好的解决办法是
HashMap<String, String> users = new HashMap<>();
users.put(uesrname, password);
if(users.get(username) != null && users.get(username).equals(password)){
// connected
break;
}
HashMap users=newhashmap();
users.put(uesrname、密码);
if(users.get(username)!=null&&users.get(username).equals(password)){
//连接的
打破
}
如何使用java.util.Map
,用户名作为键,密码作为值?我希望这只是一个练习或家庭作业。在生产系统中,您不应该以明文形式存储密码。是的,如果您可以使用Map,则这是家庭作业,然后查看javaguy的答案。但是,如果您的任务要求您使用ArrayList,那么您的问题是,在找到用户名和密码后,您不会停止,而是继续使用ArrayList中没有用户名和密码的其余条目。您需要使用break
或添加一个布尔标志,表示找到了用户名和密码。您能在文件中添加示例数据吗?它看起来如何?我以前从未使用过哈希映射,如何将文本文件的值添加到其中?请尝试(Scanner myScanner=new Scanner(file)){while(myScanner.hasnetline()){users.add(myScanner.nextLine());这里有JavaDoc。基本上,要将键值对放入其中,可以使用:Map Map=newhashmap();Map.put(“用户名”,用户名);Map.put(“密码”,密码);
然后可以执行Map.get(“用户名”)
例如,要返回username对象引用。这就是我为arraylisty所做的。您只需使用users.put(username,password)
users.add(username)
users.add(password)
if (users.get(i).contains(username) && users.get(i).contains(password)){
// never goes true
}
users.add(username + password)
if (users.get(i).contains(username) && users.get(i).contains(password)){
// should be good
break;
}
HashMap<String, String> users = new HashMap<>();
users.put(uesrname, password);
if(users.get(username) != null && users.get(username).equals(password)){
// connected
break;
}