Java 为什么';我的字符串检查代码不能工作吗
我试图制作一个JFrame,它检查放置在JTextField中的文本是否与.txt文件中的信息相同。 然后,如果这是正确的,它会检查jpassword字段中的信息是否与.txt文件中的信息匹配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())
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();方法来修复它,谢谢大家不管!但我不知道是哪个角色造成了问题;)