Как проверить текстовый файл, чтобы увидеть, содержит ли он строку? - PullRequest
0 голосов
/ 04 апреля 2019

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

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

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

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

Затем я пытаюсь прочитать текстовый файл словарь.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 Ответ

1 голос
/ 04 апреля 2019

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

while (s.hasNextLine())
{
    String line=s.nextLine();
    if(line.contains(str))
    {
        return true;
    }
}   
return false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...