2012-12-26 3 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) 및 클릭에 입력 버튼의 결과는 다음과 같은 마지막 레코드 만 표시합니다. fifth 2005

왜? 도움 주셔서 감사합니다.

+0

사실이 코드는 2005 55' 다섯 번째'보여줄 수있는 방법을 모른다. 메소드 안에'bookid'를 출력하여 실제로 33인지 확인하십시오. 그리고 디버거를 사용해보십시오. –

답변

2

문제의 실제 해결책이 아닐 수도 있지만 책 ID로 책을 검색하는 방식으로 오류가 발생하기 쉽습니다.

String.contains(bookid)을 사용하면 전체 줄에 책 ID가 포함되어 있는지 확인할 수 있습니다.

예를 들어

:

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

만을 비교 한 후 먼저 문자열을 분할해야이 문제를 해결하고 : 책의 ID가 20 경우 문자열 2002 책 아이디 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

관련 문제