2013-12-22 1 views
1

Я испытываю странную проблему с файлом в Java ... Я хочу сравнить каждую строку этого файла со строкой (переменная хоста), но (я не знаю почему), в то время как цикл всегда сравнивая первую строку файла и игнорирует вторую строку, третий ...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) во время цикла, а не if else statement – 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; '. Без него вы получите ошибку компиляции «отсутствующий оператор возврата» – Bohemian

+0

Хорошо, я думаю, что это должно быть после цикла * while *. В этом случае * return 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; 
}