我的"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
为什么?谢谢你的帮助!
也许这并不能真正解决你的问题,但是按书号搜索图书的方法很容易产生错误。
您正在使用String.contains(bookid)
检查完整行是否包含图书id。
例如:如果您的图书id是20
,第一行将匹配,因为字符串2002
包含图书id 20
:
"second 2002 22".contains("20"); // returns true because 2002 'contains' 20
要解决这个问题,你应该先拆分字符串,然后只比较书的id。
update:一个可能的修复方法如下:
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;
}
}