2013-12-22 63 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

也許你的主機數組包含第一行,它返回true – Makky

+0

你確定嗎?嘗試將System.out.println(l)放在while循環中而不是if語句中 – 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是的,我們需要'返回false; '。沒有它,你會得到一個編譯錯誤「缺少返回語句」 – 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; 
}