(JAVA) Сравнение слова, введенного пользователем, с другим словом, содержащимся в текстовом файле. - PullRequest
1 голос
/ 21 августа 2011

Я хотел бы проверить, содержит ли мой текстовый файл слово, введенное пользователем в текстовое поле.Когда пользователь нажимает «Подтвердить», если слово уже есть в файле, он вводит другое слово.Если слово отсутствует в файле, оно добавит слово.Каждая строка моего файла содержит одно слово.Я помещаю System.out.println, чтобы увидеть, что печатается, и всегда говорит, что слово не существует в файле, но это не так ... Можете ли вы сказать мне, что не так?1003 *

class ActionCF implements ActionListener
    {

        public void actionPerformed(ActionEvent e)
        {

            str = v[0].getText(); 
            BufferedWriter out;
            BufferedReader in;
            String line;
            try 
            {

                out = new BufferedWriter(new FileWriter("D:/File.txt",true));
                in = new BufferedReader(new FileReader("D:/File.txt"));

                while (( line = in.readLine()) != null)
                {
                    if ((in.readLine()).contentEquals(str))
                    {
                        System.out.println("Yes");

                    }
                    else {
                        System.out.println("No");

                        out.newLine();

                        out.write(str);

                        out.close();

                    } 

               }
            }
            catch(IOException t)
            {
                System.out.println("There was a problem:" + t);

            }   
        }

    }

1 Ответ

6 голосов
/ 21 августа 2011

Похоже, вы звоните in.readLine() дважды, один раз в цикле while и снова в условном. Это заставляет его пропускать все остальные строки. Кроме того, вы хотите использовать String.contains вместо String.contentEquals, поскольку вы просто проверяете, содержит ли строка слово . Кроме того, вы хотите подождать, пока весь файл не будет найден, прежде чем решите, что слово не найдено. Итак, попробуйте это:

//try to find the word
BufferedReader in = new BufferedReader(new FileReader("D:/File.txt"));
boolean found = false;
while (( line = in.readLine()) != null)
{
    if (line.contains(str))
    {
        found = true;
        break; //break out of loop now
    }
}
in.close();

//if word was found:
if (found)
{
    System.out.println("Yes");
}
//otherwise:
else
{
    System.out.println("No");

    //wait until it's necessary to use an output stream
    BufferedWriter out = new BufferedWriter(new FileWriter("D:/File.txt",true));
    out.newLine();
    out.write(str);
    out.close();
}

(обработка исключений в моем примере опущена)

РЕДАКТИРОВАТЬ: Я просто перечитал ваш вопрос - если каждая строка содержит ровно одно слово, то equals или equalsIgnoreCase будет работать вместо contains, убедитесь, что для проверки любых пробелов:

перед вызовом trim на line:
if (line.trim().equalsIgnoreCase(str))
...
...