Как проверить текстовый файл, чтобы увидеть, содержит ли он строку?

#java #file #class #arraylist

#java #файл #класс #arraylist

Вопрос:

Я пишу класс, который считывает содержимое текстового файла (dictionary.txt ) и использует метод isValidWord, который возвращает true или false в зависимости от того, образуют ли буквы, введенные пользователем, слово в текстовом файле

Буквы, введенные пользователем, поступают через объекты «Tile» (я написал класс Tile, в котором есть метод getLetter, который возвращает букву). Итак, ArrayList объектов Tile передается методу isValidWord.

Конструктор принимает строку имени файла (программа-драйвер передает ее dictionary.txt ). Затем конструктор считывает содержимое файла в ArrayList строк.

Метод isValidWord принимает ArrayList объектов Tile. Каждый объект tile содержит букву, поэтому я использую метод getLetter из класса Tile, чтобы получить букву каждого объекта tile при добавлении его к строке.

Затем я пытаюсь прочитать текстовый файл, dictionary.txt и посмотреть, содержит ли файл строку из предыдущей части; если это так, isValid имеет значение true.

 private boolean isValid;
private String str;
private ArrayList<String> list = new ArrayList<String>();

public Dictionary(String fileName) throws IOException
{

      File file = new File(fileName);
      Scanner s = new Scanner(file);
      while (s.hasNextLine())
      {
         list.add(s.nextLine());
      }
      str = "";
      isValid = true;
}

public boolean isValidWord(ArrayList<Tile> tiles) throws IOException
{     

      StringBuilder sb = new StringBuilder(); 
      for(int i=0; i< tiles.size(); i  )
      {
         sb.append(tiles.get(i).getLetter());
      } 

      str = sb.toString();  

      File file = new File("dictionary.txt");
      Scanner s = new Scanner(file);

      while (s.hasNextLine())
      {

         String line=s.nextLine();

         if(line.contains(str))
         {
            isValid = true;
         }
         else
            isValid = false;
      }   

      return isValid;
}
  

Моя проблема в том, что, несмотря ни на что, isValidWord всегда возвращает false . Я протестировал переменную str (которая действительно печатает строку, буквы из формы объектов плитки), но по какой-то причине оператор if никогда не выполняется

Ответ №1:

Удалите временную isValid переменную; даже если файл содержит слово, если вы не вернетесь немедленно, ваша следующая итерация сделает это false (и вам это не нужно). Нравится,

 while (s.hasNextLine())
{
    String line=s.nextLine();
    if(line.contains(str))
    {
        return true;
    }
}   
return false;