Давайте найдем нужные нам строки, и вот что мы должны для этого сделать. Считать с консоли имя файла. Вывести в консоль все строки из файла, которые содержат всего 2 слова из списка words. Закрыть потоки.
Ищем нужные строки
- 12
Недоступна
Комментарии (225)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Anonymous #2996742
22 июня, 17:27
Решал через регулярные выражения. Вроде бы ответ сходился, но валидатор не пропускал. И в очередной раз он был прав. Попробуйте в файле написать (например) не "Д файл файл Д", а "Д файл файл1 Д".
Так вот, если в Pattern.compile("файл"), то оба выражения подойдут т.к. "файл1" содержит "файл".
Поэтому стоит воспользоваться метасимволом границы слова \b.
0
comrade_b
6 июня, 11:11
Валидатор не принимает решение через стрим:
В стриме считаю количество совпадений.
Ошибка в файле com/javarush/task/task19/task1922/Solution.java в строке : 32
Не найден метод "toList()" в интерфейсе "java.util.stream.Stream<java.lang.String>"
Меняю на:
что масло масленное, но то же самое. Та же ошибка. Хотя и первый, и второй код работает, и выдают правильные результаты.
От себя добавлю, кому интересна тема: через стрим решение всегда в 3-4 раза медленнее, чем через цикл вызов метода .contains. Просто потому, что в потоке мы фильтруем весь, полученный из файла, а contains намного быстрее в Collections. Тестировал на файле из 5 тысяч строк. +1
MapXyZ
31 мая, 09:23
Вывод был правильный, но валидатор ругался на последний пункт.
Оказалось... я в цикле проверял строку на соответствие условию и если она подходила - выводил в консоль,
Создал ArrayList<String> для хранения подходящих строк, и после цикла уже их все вывел в консоль - валидатор пропустил..
Ну, ребята, в условии не сказано, что нужно выбрать строки, а потом вывести... главное вывести.
Лан.. может кому поможет.
0
Олег
30 мая, 12:58
Валидатор: Учитывай, что в списке words может быть сколько угодно слов.
Сразу писать полное условие - для слабаков!
0
Anonymous #3036451
13 мая, 11:44
Хочу заметить что решение через words.contains(s) не лучший вариант при большом количестве элементов в words, т. к. сложность функции contains составляет O(n). В этом случае словарь разумнее перегнать в HashSet, где сложность функциии contains составляет O(1). Подробнее
P. S. решил через regexp:
0
artinsky
29 марта, 16:51
Ковырял regexp. Интересовало, можно ли вычислить заданное слово в строке с ограничением количества вхождений сразу, без сплитов, чтобы не организовывать цикл с подсчётом частоты?
То есть, что-то вроде (\\bword\\b){1}. Только в данном случае квантификатор {1} не работает.
Может, кто знает как? Здорово бы сократило код
0
Yuri_S Инженер-конструктор 2к.
7 февраля, 07:37
public abstract boolean contains(Object o)
Returns true if this list contains the specified element. More formally, returns true if and only if this list contains at least one element e such that (o==null ? e==null : o.equals(e))
+1
PROaction
29 января, 10:58
0
Михаил Кладовщик с кучей времени
17 января, 12:36
Была проблема в том, что русские буквы из файла считывались корректно, а русские буквы из статического блока записывались как кракозябры. Из-за этого всегда было 0 совпадений. По совету топ популярного коммента изменил Global Encoding на UTF-8. После этого все русские буквы стали отображаться корректно.
0
Yuriy Platonov
28 декабря 2021, 19:51
Не проходил валидацию по последнему пункту из-за того, что вынес Pattern в статическое поле и инициализировал его в статическом блоке отдельным методом. Валидатор ругался - "Программа должна выводить в консоль все строки из файла, которые содержат всего 2 слова из списка words".
0