2009-10-26 4 views
0

나는 혼란 스럽다. 두 파일을 첫 번째 파일의 모든 줄에서 첫 번째 토큰을보고 두 번째 파일의 모든 줄의 세 번째 토큰과 비교하면서 반복하려고합니다.자바 중첩 while 회 돌이를 사용하여 루프

BufferedReader reader1 = new BufferedReader(new InputStreamReader(new FileInputStream(fromFile1))); 

BufferedReader reader2 = new BufferedReader(new InputStreamReader(new FileInputStream(fromFile2),"EUC-JP")); 

String line1, line2 = null; 
String temp1, temp2 = null; 

while ((line1=reader1.readLine()) != null) 
{ 
    StringTokenizer st1 = new StringTokenizer(line1); 
    temp1 = "U"+st1.nextToken(); 
    while((line2=reader2.readLine()) != null) 
    { 
     StringTokenizer st2 = new StringTokenizer(line2); 
     temp2 = st2.nextToken(); 
     temp2 = st2.nextToken(); 
     temp2 = st2.nextToken(); 
     if(temp2.equals(temp1)); 
     { 
      System.out.println(temp1+" "+temp2); 
     } 
    } 
} 

그러나, I 출력에 표시되는 모든 첫번째 파일의 첫 번째 라인과의 각 행에서 세 번째 토큰으로부터 제 토큰은 : 여기 중첩 while 루프 형태의 논리 구조는 두 번째 파일은 "동등"여부에 관계없이 6,000 (파일 2의 길이) 번 반복되었습니다. 다른 인코딩과 관련이 있습니까? 나는 equals 테스트에 영향을 미친다는 것을 알 수있다.하지만 루프가 제대로 작동하지 않는 이유는 무엇인가?

건배, 브랜든

답변

4

는이다; 뒤에 예상대로 외부 루프 내에서 파일 2를 다시해야하기 때문에 아마, 어쨌든 작동하지 않을 것이다, 그렇지 않으면 전용 파일 1

+0

아의 첫 번째 행에 대한 제대로 작동하지만

if(temp2.equals(temp1)); 

경우, ammoQ 덕분에 모든것이 수정되었습니다. 나는 상대적으로 Java에서 io 파일을 처음 사용합니다. 외부 루프 내에서 파일을 열어야하는 이유는 무엇입니까? – Brandon

+0

Brandon : 내부 루프를 처음 실행 한 후 이미 reader2가 스트림의 끝에 있기 때문에; 다음 번에 inner while 루프에 오면 readLine()은 null 만 반환합니다. 가장 간단한 방법은 스트림 리더를 닫고 다시 여는 것입니다. –

+0

아 물론. 다시 한 번 감사드립니다! – Brandon