为什么 .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,反之亦然。