我的“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年第五期
为什么呢? 谢谢你的帮助!
答案 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;
}
}