【问题标题】:string matching operation in javajava中的字符串匹配操作
【发布时间】:2011-08-05 14:58:03
【问题描述】:

与数据库连接时,以下代码中的字符串匹配未正确完成。两个值相同但未执行相应的操作。谁能帮我纠正这个问题?提前致谢!

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);” .

【问题讨论】:

  • 你不应该使用==来比较字符串,而是使用.equals(..)方法

标签: java javabeans string-matching


【解决方案1】:

问题大概是

if(check==find)

应该是

if(check.equals(find))

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2020-12-31
          • 1970-01-01
          • 2017-08-03
          • 2013-04-18
          • 1970-01-01
          • 2013-10-17
          • 2013-10-13
          • 2018-01-01
          • 2015-03-08
          相关资源
          最近更新 更多