Считаем слово

  • 20
  • Недоступна
Считать с консоли имя файла. Файл содержит слова, разделенные знаками препинания. Вывести в консоль количество слов "world", которые встречаются в файле. Закрыть потоки.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (478)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Ягодин Артем Романович 19 уровень, Москва
вчера, 10:07
Так выглядит код, GitHub решил со второй попытки, забыл закрыть поток... -_-
Andrei Po 22 уровень
21 октября, 14:58
непереносимая лёгкость поведения валидатора, или проверочных файлов
Pattern.compile("(world)").matcher(line); // не пропускает
Pattern.compile("\\bworld\\b").matcher(line); // пропускает,
хотя с "\\b" тот ещё геморрой, когда слова стоят рядом и не разделены
очень советую конструкцию
System.out.println(matcher.results().count());
с ней - объём кода метода main - 3 строчки, учитывая считывание с файла, поиск и подсчёт правда Stream API - похоже не поддерживают сервера Javarush
Артем СисАдмин Master
понедельник, 19:21
Stream API поддерживается, он в 1.8 появился.
Andrei Po 22 уровень
позавчера, 04:00
да, я тоже так думал, но по какой-то причине не только в этой, но и в задаче https://javarush.ru/tasks/com.javarush.task.task18.task1816 решение
System.out.println(match.results().count());
не компилируется. приходится перебирать находки традиционным matcher.find() и считать, хотя у себя в I Idea - работает и со стримами
Артем СисАдмин Master
позавчера, 10:42
встречал как - то случай. что лямды на выходе не принимало (аналогично твоему примеру). но в то же время внутри задачи и лямбды и Stream API прекрасно работают и их пропускает.
Andrei Po 22 уровень
позавчера, 10:43
ясно. спасибо.
Роман 19 уровень, Краснодар
13 часов назад
Pattern.compile("(world)").matcher(line); // не пропускает Все верно. Попробуйте в тексте написать слово worlde34. Регулярка "(world)" найдет в нем world, а это противоречит условию задачи. А с якорями \\b \\b мы ограничиваем поиск слова world от w до d, что корректно и валидатор пропускает.
Игорь Че 23 уровень, Подольск
20 октября, 14:36
Sergey 20 уровень, Минск
19 октября, 21:35
Я плохо прочитал условие и посчитал просто количество слов в файле и валидатор принял. Скорее всего в тестовом файле только слова world. Надо бы поправить, а то неспортивно получается. Решил задачу в 3 строки кода, не учитывая открытие и закрытие потоков.
the10or 26 уровень, Киев
6 октября, 10:03
главная запара с регуляркой, потом сделал через Collections.frequency()
Rico 23 уровень, Минск
30 сентября, 11:27
Хорошая регулярка на такие случаи "\\W" - проверяет буква ли перед ней,
Евгений 26 уровень, Москва
25 сентября, 06:52
Pattern pattern = Pattern.compile("\\bworld\\b");
Sergey 20 уровень
15 октября, 07:56
Почему у меня эта же регулярка не срабатывает? %) Пишет: "Проверь, почему программа находит не все слова "world" в файле."
Sergey 20 уровень
15 октября, 08:34
разобрался ) Надо было к text.append(s) еще пробел добавить что бы строки не слипались
Владимир К 19 уровень, Омск
13 сентября, 16:38
Как то не сразу догадался, что word должно быть отдельным словом, а не просто встречаться в файле. Интересно, таких много?
Ayrat Chaplin 25 уровень
14 октября, 08:22
спасибо друг столько способов перепробовал а ответ был так прост))
Михаил Клименко 19 уровень, Краснодар Expert
13 сентября, 11:57
Всего эту задачу решили 15711 учеников. Неожиданно быстро Валя пропустила, оказалось, что только пробел забыл указать как делимитер в split(), сначала указал все знаки пунктуации
Игорь Че 23 уровень, Подольск
20 октября, 14:35
также долго бился, не учел пробел в \\p{Punct}
MR 20 уровень, Харьков
31 августа, 17:03
Первый раз в жизни (или просто за долгое время?... не, бред какой-то) я не списала, а придумала (ладно, с гуглением и подсматриванием туды-сюды) мудренную конструкцию, в которой, конечно же облажалась, но ребята из "помощи" мне всё очень круто разъяснили. Но это не мешает мне гордиться собой. Чувствую, что всё же расту)))