Итак, я работаю над проектом, который требует, чтобы я сравнивал вводимые пользователем данные со списком слов в текстовом файле. Я пытался сравнить ввод в виде строки с BufferReader, но это не сработало. Любые предложения приветствуются

Вот код для проекта

public class Lab5Program1 {
    public static void main(String[] args) throws IOException {
        File file = new File("fileName");
        BufferedReader br = new BufferedReader(new FileReader(file));
        /** In order to read a text file that is inside the package, you need to call the actual file and then pass it
         * to the BufferedReader. So that it can be used in the file**/


//        String[] wordArray = { "hello", "goodbye", "cat", "dog", "red", "green", "sun", "moon" };
        String isOrIsNot, inputWord;

        // This line asks the user for input by popping out a single window
        // with text input
        inputWord = JOptionPane.showInputDialog(null, "Enter a word in all lower case:");

        // if the inputWord is contained within wordArray return true
        if (wordIsThere(inputWord, br))
            isOrIsNot = "is"; // set to is if the word is on the list
        else
            isOrIsNot = "is not"; // set to is not if the word is not on the list

        // Output to a JOptionPane window whether the word is on the list or not
        JOptionPane.showMessageDialog(null, "The word " + inputWord + " " + isOrIsNot + " on the list.");
    } //main

    public static boolean wordIsThere(String findMe, BufferedReader bufferedReader) throws IOException {

//        for (int i = 0; i < bufferedReader.lines() ; i++){
//            if (findMe.equals(theList[i])){
//                return true;
//            }
//        }

        while((findMe = bufferedReader.readLine()) != null) {
            if (findMe.equals(bufferedReader.readLine())){
                return true;
            }
        }
        return false;
    }  // wordIsThere
}
0
OEThe11 17 Сен 2021 в 17:51

2 ответа

Лучший ответ

Ошибка исходит от функции проверки, существует ли слово. Каждая строка, считываемая из текстового файла, не проверяется с помощью findMe. Внес эти изменения, все работает.

    public static boolean wordIsThere(String findMe, BufferedReader br) throws IOException {
        for (String word = br.readLine() ; word != null; word = br.readLine()) {
            if (word.equals(findMe))
                return true;
        }
        return false;
    } 
1
vnk 17 Сен 2021 в 15:16

В методе wordIsThere параметр findMe - это слово, которое вы ищете. Однако вы перезаписываете значение параметра строкой, прочитанной из файла.

Вы должны объявить отдельную переменную для хранения строки текста, которую вы читаете из файла.

public static boolean wordIsThere(String findMe, BufferedReader bufferedReader) throws IOException {
    String line = bufferedReader.readLine(); // read first line of file
    while(line != null) {
        if (findMe.equals(line)){
            return true;
        }
        line = bufferedReader.readLine(); // read next line of file
    }
    return false;
}

Также обратите внимание, что, поскольку вы используете JOptionPane для получения пользовательского ввода, запускается отдельный поток, и этот поток не завершается, когда завершается метод main. Следовательно, вы должны вызвать метод exit класса java.lang.System в последней строке main в классе Lab5Program1. В противном случае каждый раз, когда вы запускаете класс Lab5Program1, вы запускаете новую JVM, которая не будет завершена.

Для консольных приложений вы можете использовать класс java.util. Сканер для ввода данных пользователем.

Scanner stdin = new Scanner(System.in);
System.out.print("Enter a word in all lower case: ");
String inputWord = stdin.nextLine();

Также подумайте о том, чтобы закрыть файлы, когда закончите с ними. В вашем случае в этом нет необходимости, поскольку файл автоматически закрывается при завершении работы JVM.

1
Abra 17 Сен 2021 в 15:26