为什么 .equals() 不比较这些字符串?
Why doesn't .equals() compare these strings?
我有一个名为 samplename 的 txt 文件,该文件中有 3 行值:
samplename
samplepassword
%%%%%%%%%%%%%%%%%
该程序是关于登录注册系统的。
当我输入
samplename
在第一个 JTextField 和
samplepassword +
在第二个 JTextField 中按下登录按钮,它应该检查我是否有这样的帐户,如果它有正确的用户名和密码。
Programm 读取内容,只是无法将其与 JTextFields 进行比较。我做错了什么?!?:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class SomeClass
{
public JButton loginButton;
public JTextField login_username;
public JTextField login_password;
String check = null;
String check2 = null;
public static void main(String[] args)
{
SomeClass someClass = new SomeClass();
someClass.doSomething();
}
public void doSomething()
{
loginButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
Scanner scanner = new Scanner(System.in);
BufferedReader rd = null;
String line;
boolean gothrew = false;
boolean ifDOES = false;
String Username;
String Password;
Password = login_username.getText().trim();
Username = login_password.getText().trim();
try
{
rd = new BufferedReader(new FileReader(
"C:\users\Dominik Gyarmati\AppData\Roaming\KeepSafe\users\"
+ login_username.getText() + ".txt"));
}
catch (FileNotFoundException ex)
{
JOptionPane.showMessageDialog(null, "Your Account doesn't exist");
}
try
{
while ((line = rd.readLine()) != null)
{
if (check == null)
{
check = line;
check.trim();
gothrew = true;
System.out.println(check);
}
else if (gothrew == true)
{
check2 = line;
check2.trim();
System.out.println(check2);
gothrew = false;
ifDOES = true;
}
else if (check.equals(Username) && check2.equals(Password))
{
JOptionPane.showMessageDialog(null,
"You've logged into your account");
check = null;
check2 = null;
ifDOES = false;
}
else
{
JOptionPane.showMessageDialog(null,
"Username or Password is wrong");
check = null;
check2 = null;
ifDOES = false;
}
}
}
catch (IOException ioexex)
{}
}
});
}
}
编辑:
我只需要更改
else if (check.equals(Username) && check2.equals(Password))
到
else if (check.equals(login_username.getText().trim()) &&
check2.equals(login_password.getText().trim())) {
首先,你的代码闻起来很臭:
- 不要使用大写的变量名,
- 修复标识,
- 从文件中读取时使用 try-with-resources,
- 不要使用硬编码字符串,
- 正确使用 String.trim() 因为字符串是不可变的,
- 妥善处理异常等
其次,尝试使用调试工具:调试完美回答你的问题。
最后,检查这一行:
Password = login_username.getText().trim();
Username = login_password.getText().trim();
将 Password
替换为 Username
,反之亦然。
我有一个名为 samplename 的 txt 文件,该文件中有 3 行值:
samplename
samplepassword
%%%%%%%%%%%%%%%%%
该程序是关于登录注册系统的。 当我输入
samplename
在第一个 JTextField 和
samplepassword +
在第二个 JTextField 中按下登录按钮,它应该检查我是否有这样的帐户,如果它有正确的用户名和密码。 Programm 读取内容,只是无法将其与 JTextFields 进行比较。我做错了什么?!?:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class SomeClass
{
public JButton loginButton;
public JTextField login_username;
public JTextField login_password;
String check = null;
String check2 = null;
public static void main(String[] args)
{
SomeClass someClass = new SomeClass();
someClass.doSomething();
}
public void doSomething()
{
loginButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
Scanner scanner = new Scanner(System.in);
BufferedReader rd = null;
String line;
boolean gothrew = false;
boolean ifDOES = false;
String Username;
String Password;
Password = login_username.getText().trim();
Username = login_password.getText().trim();
try
{
rd = new BufferedReader(new FileReader(
"C:\users\Dominik Gyarmati\AppData\Roaming\KeepSafe\users\"
+ login_username.getText() + ".txt"));
}
catch (FileNotFoundException ex)
{
JOptionPane.showMessageDialog(null, "Your Account doesn't exist");
}
try
{
while ((line = rd.readLine()) != null)
{
if (check == null)
{
check = line;
check.trim();
gothrew = true;
System.out.println(check);
}
else if (gothrew == true)
{
check2 = line;
check2.trim();
System.out.println(check2);
gothrew = false;
ifDOES = true;
}
else if (check.equals(Username) && check2.equals(Password))
{
JOptionPane.showMessageDialog(null,
"You've logged into your account");
check = null;
check2 = null;
ifDOES = false;
}
else
{
JOptionPane.showMessageDialog(null,
"Username or Password is wrong");
check = null;
check2 = null;
ifDOES = false;
}
}
}
catch (IOException ioexex)
{}
}
});
}
}
编辑: 我只需要更改
else if (check.equals(Username) && check2.equals(Password))
到
else if (check.equals(login_username.getText().trim()) &&
check2.equals(login_password.getText().trim())) {
首先,你的代码闻起来很臭:
- 不要使用大写的变量名,
- 修复标识,
- 从文件中读取时使用 try-with-resources,
- 不要使用硬编码字符串,
- 正确使用 String.trim() 因为字符串是不可变的,
- 妥善处理异常等
其次,尝试使用调试工具:调试完美回答你的问题。
最后,检查这一行:
Password = login_username.getText().trim();
Username = login_password.getText().trim();
将 Password
替换为 Username
,反之亦然。