Печать строк из файла в Java

Я делаю метод, который печатает строки в файле, содержащие определенное слово. Если параметр представляет собой пустую строку, предполагается, что будет напечатан весь файл.

У меня первая часть работает. Все в инструкции "else" отлично работает; он сканирует каждую строку и печатает строки, содержащие слово в параметре.

НО я не могу заставить его распечатать весь файл, когда в качестве параметра "слово" вводится пустая строка (""). Я не уверен, почему это так.

public void printLinesWhichContain(String word) {
    while (this.reader.hasNextLine()) {
        String line = this.reader.nextLine();
        if (word.isEmpty()) {
            System.out.println(line);
        } else {
            Scanner lineReader = new Scanner(line);
            while (lineReader.hasNext()) {
                if (lineReader.next().equals(word)) {
                    System.out.println(line);
                }
            }
        }
    }
}

person user3430421    schedule 24.04.2014    source источник
comment
Как именно вы вызываете метод printLinesWhichContain? printLinesWhichContain(); ?   -  person WoDoSc    schedule 24.04.2014
comment
Попробуйте "".equals(word)..   -  person GoldRoger    schedule 24.04.2014
comment
Этот метод отлично работает для меня, если я передаю пустую строку "" в качестве аргумента. Можете ли вы показать нам, как вы его используете?   -  person Pshemo    schedule 24.04.2014
comment
Я думаю, вам нужно нажать ctrl+i, чтобы ввести пустую строку   -  person Exorcismus    schedule 24.04.2014
comment
Вместо того, чтобы каждый раз создавать новый сканер, используйте if(line.contains(word)) System.out.println(line);, в противном случае остальная часть вашего кода в порядке.   -  person Basim Khajwal    schedule 24.04.2014
comment
Ну, я чувствую себя идиотом, ребята. Код работает нормально. Должно быть, в моем основном методе была опечатка. Я думаю, что это было связано с набором символов, так как я использую испанский компьютер, и у них разные кавычки. Нет паша нада.   -  person user3430421    schedule 24.04.2014
comment
На самом деле проблема была не в этом. Я заметил в своем основном методе, что если я вызову printLinesWhichContain(какое-то слово), а ЗАТЕМ вызову его для пустой строки, это не сработает. Иначе будет. Я теряюсь, почему.   -  person user3430421    schedule 24.04.2014
comment
РЕДАКТИРОВАТЬ: я понял это. Мне пришлось создать сканер ВНУТРИ метода. Если я создам его вне метода, он прочитает файл при первом вызове, а затем все. Таким образом, он каждый раз начинается сначала.   -  person user3430421    schedule 24.04.2014
comment
и если вы попробуете два вызова printLinesWhichContain (какое-то слово), а затем printLinesWhichContain (какое-то другое слово), что произойдет? Второй звонок работает или нет? Может быть, проблема не в пустой строке, а в вашем читателе, вы реализовали свой собственный читатель? Может читалка не "перезагружается" и по этой причине срабатывает только один раз с первого раза.   -  person WoDoSc    schedule 24.04.2014
comment
Потому что this.reader.hasNextLine() во второй раз нечего читать   -  person Marco Acierno    schedule 24.04.2014


Ответы (1)


Получив строку в формате String, вы можете использовать метод indexOf для получения индекса слова.

Я бы не стал создавать сканер для каждой строки.

Я имею в виду, что вы можете изменить часть else следующим образом.

int indexOfWord = line.indexOf(word);
            if (indexOfWord >= 0) 
            {
                 System.out.println(line);
            }
person Chan    schedule 24.04.2014
comment
Это не имеет отношения к тому, что задает вопрос. - person WoDoSc; 24.04.2014
comment
Он напечатает строку, если аргумент равен . Разве не в этом вопрос? - person Chan; 24.04.2014
comment
а если слово не пустая строка, а слово, не содержащееся в строке? Он напечатает строку, а это неправильно - person WoDoSc; 24.04.2014
comment
Исправлено. Спасибо. Изменено if (indexOfWord != -1) на if (indexOfWord ›= 0). - person Chan; 24.04.2014