Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从arraylist读取以检查它是否包含用户名和密码_Java_String_Arraylist - Fatal编程技术网

Java 从arraylist读取以检查它是否包含用户名和密码

Java 从arraylist读取以检查它是否包含用户名和密码,java,string,arraylist,Java,String,Arraylist,我正在创建一个登录页面,从arraylist中的文本文件中读取用户名和密码。然后,它将检查arraylist,查看它是否包含用户名和密码。出于某种原因,我不明白如果它包含它为什么不返回true。我认为问题在于每个索引中有多个字符串,但我不知道如何检查它是否只包含一个字符串。 任何帮助都将不胜感激。它在jframegui中 登录按钮 private ArrayList<String> users = new ArrayList<String>(); private

我正在创建一个登录页面,从arraylist中的文本文件中读取用户名和密码。然后,它将检查arraylist,查看它是否包含用户名和密码。出于某种原因,我不明白如果它包含它为什么不返回true。我认为问题在于每个索引中有多个字符串,但我不知道如何检查它是否只包含一个字符串。 任何帮助都将不胜感激。它在jframegui中

登录按钮

  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;
}