java中的字符串匹配操作

时间:2011-08-05 14:58:03

标签: java javabeans string-matching

当与数据库连接时,

在下面的代码中没有正确完成字符串匹配。两个值相同但相应的操作都没有执行。任何人都可以帮我解决这个问题吗?提前谢谢!

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import javax.swing.JFrame;
public class NewJFramefin extends javax.swing.JFrame implements ActionListener
{  

public NewJFramefin() 
{
    initComponents();
    add(jl1);
    add(jf1);
    jb1.setActionCommand("OK");
    jb1.addActionListener(this);
    add(jb1);
    jb2.setActionCommand("CANCEL");
    jb2.addActionListener(this);
    add(jb2);
    jb3.addActionListener(this);
    add(jb3);
}

public void closewindow() 
{
   System.exit(1);

}
public void actionPerformed(ActionEvent e)
{
      String find=jf1.getText();
      String ev=e.getActionCommand();
      String check;
      String str="jdbc:odbc:dsn1";
      try
      {
          Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
          Connection con=DriverManager.getConnection(str);
          Statement s=con.createStatement();
          s.execute("select * from Table1");
          ResultSet res=s.getResultSet();
          if(res!=null)
          {
              while(res.next())
              {
                  check=res.getString(1);
                  System.out.println("STRING FROM DB:"+check + find);
                  if(check==find)
                  {
                       System.out.println("MEANING:"+res.getString(2));
                  }
                  if(ev.equalsIgnoreCase("OK") &&(find.equalsIgnoreCase(check)))
                  {
                      jf2.setText(res.getString(2));
                      add(jf2);

                  }
                  else if(ev.equalsIgnoreCase("CANCEL"))
                  {
                      jf2.setText(" cancelled    ");
                      add(jf2);
                      jf1.setText("    ");
                      add(jf1);
                  }
                  else if(ev.equalsIgnoreCase("EXIT"))
                  {

                      closewindow();
                  }

               }
          }


      }           
      catch(Exception ew)
      {

      }
}


public static void main(String args[]) 
{
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new NewJFramefin().setVisible(true);
        }
    });
}
}

感谢您的回复朋友..以上代码中的确切问题是我们必须修剪n比较,否则应该在构造函数中包含代码“ jf1.setText(null);

4 个答案:

答案 0 :(得分:4)

问题可能是

if(check==find)

应该是

if(check.equals(find))

==不在Java中进行字符串比较;它检查对象是否相同(同一个对象)

答案 1 :(得分:0)

永远不要将String实例与==进行比较。使用string1.equals(String2)==检查两个变量是否包含相同的引用,而不是两个字符串包含相同的字符。

答案 2 :(得分:0)

操作A == B用于识别两个对象引用都指向同一个对象。

操作A.equals(B)用于标识两个对象引用都包含相同的值。

由于您的字符串是独立构造的(一个是在您编写的代码中构造的,另一个是在JDBC层中构造的),因此它们不能引用相同的对象,您需要使用equals运算符。

答案 3 :(得分:0)

正如Hunter McMillen所说,你不应该使用==来比较字符串。在两个字符串上使用==只有在它们是相同的String对象时才会返回true。另一方面,如果两个字符串具有相同的内容,equals()方法将返回true。