2013-12-22 3 views
1

Java 파일의 이상한 문제가 발생했습니다 ... 이 파일의 모든 행을 문자열 (호스트 변수)과 비교하려고 합니다만 (모르겠다. 왜), while 루프는 항상 여기 Java가 문자열로 파일의 행을 비교합니다.

코드의 ... 파일의 첫 줄을 비교하고 두 번째 줄, 세 번째는 무시된다

fr = new FileReader (file); 
inf = new BufferedReader(fr); 
String l; 
while ((l=inf.readLine()) != null) { 
    if (host.contains(l)) 
     return true; 
    else 
     return false; 
} 

어떤 도움을 주시면 감사하겠습니다 ...

+0

아마도 호스트 배열에 첫 번째 행이 포함되어 있고 사실 일 경우 – Makky

+0

이 맞나요? else 문 대신에 while 루프에 System.out.println (l)을 넣으십시오. – milandjukic88

+0

나는 Makky에 동의합니다 – milandjukic88

답변

1

host.equals(l)이거나 가능하면 l.contains(host)이어야합니다. 그것은 당신이하고 싶은 일에 달려 있습니다.

1

루프의 if/else 문 때문에 파일의 첫 번째 행만 테스트합니다. 어느 브랜치라도 리턴으로 돌아가므로 나머지 파일의 내용은 처리되지 않습니다.

파일 끝에 도달 한 후에 만 ​​false를 반환해야할까요?

fr = new FileReader (file); 
inf = new BufferedReader(fr); 
String l; 

while((l=inf.readLine())!=null){ 
    if (host.contains(l)) 
     return true; 
} 

return false; 
+0

고마워요! 당신은 내 문제를 해결했습니다. – user2994057

+0

@ user2994057 문제가 해결되었으므로이 대답을 수락하십시오! 그래서, 지나가는 사람들은리스트에서 가장 좋은 것을 취할 수 있습니다. – Keerthivasan

2

두 가지 문제 :

  1. 당신은 호스트 이름의 라인을 찾고있다 - 즉 바늘에서 건초 더미를 찾는처럼을 - 당신은 테스트를
  2. 상관없이 조건의 결과를 반대로 첫 번째 라인 대신

을 테스트되도록, 단지 한 번 테스트 후 반환이 시도 :

String l; 
while ((l=inf.readLine()) != null) 
    if (l.contains(host)) 
     return true; 
return false; 
+0

우리는 정말로 그것을 필요로합니까 ** false를 반환합니다 ** 이것은 OP의 질문에있는 것입니다 – Keerthivasan

+0

@Octopus 예, 우리는'return false; '. 그것 없이는 컴파일 에러가 발생합니다. "return statement가 없습니다." – Bohemian

+0

좋습니다. * while * 루프 이후에 있어야합니다. 이 경우 * false를 반환하고, * 행에 호스트가 없으면 실행됩니다. 내가 맞습니까? – Keerthivasan

0

파일에서 호스트 문자열을 찾고 있다고 가정 해보십시오. 당신은 이것을 할 수 있습니다.

public boolean contains(Reader in, String word) throws IOException { 
    BufferedReader inf = new BufferedReader(in); 
    String l; 
    boolean found = false; 
    while((l=inf.readLine())!=null){ 
     if (l.contains(word)) { 
      found = true; 
      break; 
     } 
    } 
    return found; 
} 
관련 문제