-2

我的“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

为什么?谢谢你的帮助!

4

1 回答 1

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;
    }
}
于 2012-12-26T16:43:57.510 回答