获取书籍ID和显示书籍详细信息

时间:2012-12-26 16:33:20

标签: java file

我的“AllBookRecords.txt”文件是这样的:

Name        Date        Number
second   2002   22
thired   2003   33
fourth   2004   44
fifth   2005   55

我的搜索按钮代码为:

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String bookid=jTextField2.getText();
    File f=new File("D:\\AllBookRecords.txt");
    try{
        FileReader Bfr=new FileReader(f);
        BufferedReader Bbr=new BufferedReader(Bfr);
        String bs;
        while( (bs=Bbr.readLine()) != null ){
            if( bs.contains(bookid ) ){
                String[] Ust=bs.split("   ");
                String Bname=Ust[0];
                String Bdate=Ust[1];
                jLabel1.setText("Book Found,    "+ Bname + "    " + Bdate);
            }
        }
    }
    catch (IOException ex) {
        ex.printStackTrace();
    } 
}             

当我输入例如33并单击按钮时,结果只显示如下的最后一条记录: 2005年第五期

为什么呢? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

也许不是解决问题的真正方法,但是按书籍ID搜索图书的方式很容易产生错误。

您正在使用String.contains(bookid)检查整行是否包含图书ID。

例如:如果您的图书ID为20,则第一行会匹配,因为字符串2002包含图书ID 20

"second   2002   22".contains("20"); // returns true because 2002 'contains' 20

要解决此问题,您应首先拆分字符串,然后仅比较图书ID。

更新:对此的可能解决方案如下:

while( (bs=Bbr.readLine()) != null ){
    String[] Ust=bs.split("   ");
    String Bname=Ust[0];
    String Bdate=Ust[1];
    String id = Ust[2];
    if (id.equals(bookid.trim()) // only compare Id's + you should always trim user input
        jLabel1.setText("Book Found,    "+ Bname + "    " + Bdate);
        break;
    }
}