2012-12-26 19 views
-1

我“AllBookRecords.txt”文件是这样的:获取图书ID和显示图书详细

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年

为什么? 谢谢你的帮助!

+0

其实我不知道该程序是如何能显示'第五2005 55'。在方法内部打印'bookid'以确保它确实是33.并尝试使用调试器。 –

回答

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; 
    } 
} 
+0

你能解释一下吗?我如何解决这个问题? – Sajad

+0

我完全困惑! – Sajad

+0

我更新了我的答案 – micha