Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/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
Java 为什么';我的字符串检查代码不能工作吗_Java_String_Swing_Java.util.scanner - Fatal编程技术网

Java 为什么';我的字符串检查代码不能工作吗

Java 为什么';我的字符串检查代码不能工作吗,java,string,swing,java.util.scanner,Java,String,Swing,Java.util.scanner,我试图制作一个JFrame,它检查放置在JTextField中的文本是否与.txt文件中的信息相同。 然后,如果这是正确的,它会检查jpassword字段中的信息是否与.txt文件中的信息匹配 public void actionPerformed(ActionEvent e) { if(e.getSource() == button) { if(!username.getText().equals("") && passIsGood())

我试图制作一个JFrame,它检查放置在JTextField中的文本是否与.txt文件中的信息相同。 然后,如果这是正确的,它会检查jpassword字段中的信息是否与.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())可能是导致问题的原因。 文本文件如下所示: 用户名密码 测试 测试2测试3


请注意,每个字段之间的空格都是制表符,因此我的分隔符使用(“\t | \n”)

文本字段中包含的字符串可能包含一些不需要的字符。使用字符域(所有ascii值都是一个符号)来去除这些字符域。试试这个:

import java.io.File;
import java.util.Scanner;

public class readUsers {

    public static void main(String[] args) {
        try {
            Scanner reader = new Scanner(new File("users.txt"));
            reader.useDelimiter("\t|\n");

            String username = "username";
            String password = "password";

            for (int i = 0; i < username.length(); i++) {
                //replace possible unwanted characters
                if (username.charAt(i) < 33 || username.charAt(i) > 126)
                    username = username.replace(Character.toString(username.charAt(i)), "");
            }

            for (int j = 0; j < password.length(); j++) {
                //replace possible unwanted characters
                if (password.charAt(j) < 33 || password.charAt(j) > 126)
                    password = password.replace(Character.toString(password.charAt(j)), "");
            }

            while (reader.hasNextLine()) {
                String user = reader.next();
                String pass = reader.next();

                //if username equals the user in the textfile, check if password equals the pass in the file
                 if (user.equals(username)) {
                    System.out.println("username passed!");
                    if (pass.equals(password))
                        System.out.println("password passed!");
                }   
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
导入java.io.File;
导入java.util.Scanner;
公共类读用户{
公共静态void main(字符串[]args){
试一试{
扫描仪阅读器=新扫描仪(新文件(“users.txt”);
reader.useDelimiter(“\t |\n”);
字符串username=“username”;
字符串password=“password”;
对于(int i=0;i126)
username=username.replace(Character.toString(username.charAt(i)),“”);
}
对于(int j=0;j126)
password=password.replace(Character.toString(password.charAt(j)),“”);
}
while(reader.hasNextLine()){
字符串user=reader.next();
String pass=reader.next();
//如果用户名等于文本文件中的用户,请检查密码是否等于文件中的密码
if(user.equals(username)){
System.out.println(“用户名已通过!”);
if(pass.equals(password))
System.out.println(“密码已通过!”);
}   
}
}捕获(例外e){
e、 printStackTrace();
}
}
}
我的文本文件如下所示:
用户名密码
用户名2密码


另外,这是我第一次回答StackOverFlow,如果我做错了,请纠正我:)

在users.txt中的每一秒字段都是一个新行之后,为什么需要在顶部调用reader.nextLine()?@sasankad.txt文件中的第一行是用于格式化的,它说“Username password”作为第一行,指示如何写出其余的内容,我想忽略它谢谢你的回应!不过,我找到了一个更简单的解决方案,结果发现我的问题是用户名在开始时包含了一个似乎不可见的\n,所以我只使用了字符串.trim();方法来修复它,谢谢大家不管!但我不知道是哪个角色造成了问题;)