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

  • 20
  • Недоступна
Считать с консоли имя файла. Файл содержит слова, разделенные знаками препинания. Вывести в консоль количество слов "world", которые встречаются в файле. Закрыть потоки.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (639)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Виктор
Уровень 19, Бобруйск, Беларусь
21 июня, 09:39
.split("\\s*(\\s|,|\\.|!)\\s*")
Регулярки осилил, самое простое regexone.com, тут даже с гугл траслейтом все понятно.
Anonymous #2566694 Backend Developer
20 июня, 19:55
Делал через регулярку, такой-же результат как у Евгения в комментарии ниже Спасибо тебе за подсказку "\\bworld\\b". Pattern pattern = Pattern.compile("\\bworld\\b", Pattern.CASE_INSENSITIVE); паттерн "world" не работает
Евгений
Уровень 19
20 июня, 17:19
Сделал через паттерн, но столкнулся с интересной проблемой. Если указать паттерн "world", валидатор выдает интересную ошибку - типо вы насчитали больше совпадений чем надо, хотя на тестовом файле все считает норм. Подскажите что может учитываться дополнительно за совпадение? ps Кому интересно прокатил паттерн "\\bworld\\b".
JustLucky2021 Android Developer
13 июня, 16:08
Я походу самый хитрый оказался применительно к этой задаче! Никаких регулярок. Просто проверяешь является ли символ БУКВОЙ (метод Characetr.isLetter(char)). Если является, то добавляешь его к StringBuilder-у. Как только встретилась не БУКВА - проверяешь что там насобиралось в StringBuilder и после проверки обнуляешь его )))
comrade_b
Уровень 26, Амстердам, Нидерланды
4 июня, 15:38
Задача хорошая, но на эпик не тянет. Если вы все остальные задачи внимательно решали, то с помощью regex решается очень просто. Тем более была уже в этой лекции задача на пунктуацию, вам только пробелы добавить надо. И в отличие от готового решения, у меня вышло 16 строк кода (класс Solution), когда в готовом решении 32 строки кода (класс Solution). Задача успешно прошла тестирование! Вы решили задачу лучше, чем 74% учеников. Вам удалось ее решить с 1 попытки. Среднее количество попыток для этой задачи 4.42. Всего эту задачу решили 20768 учеников Спойлер: - FileReader можно помоместить в качестве параметра в BufferredReader, что позволяет читать строки; - в цикле можно считать строку (с помощью BufferedReader) и разбить ее (строку) на слова с помощью метода split и регулярки "[\\p{Punct}\\s]+", а слова помесить во временный массив String[]; - ну а дальше все просто: каждое слово массива можно проверить на совпадение со словом world и увеличить счетчик за каждое совпадение counter++; лично я делал это в стриме (потоке) Arrays.stream(String[]) + метод count(), что сокращает код до 1 строки. Итого основной код, который считывает слово + разбивает на слова + проверяет совпадения, уместился в 3 строки. Надеюсь кому-то поможет. Лаконичное решение вышло. PS "[\\p{Punct}\\s]+" - проверяет на совпадение со знаками пунктуации и пробелы.
[M210] Java Developer
12 июня, 15:19
Я вообще делил строку таким способом))) Валидатор не против :)
String[] words = line.split("\\W");
Виктор
Уровень 26, Гомель, Belarus
29 мая, 18:00
Дурацкая задача. Из-за корявой валидации. Тому, кто писал эту задачу самому бы тестов побольше пройти. И более внятно поставить в условии, что именно он считает знаками препинания. Итак прогон задачи на "авторском решении" показал, что: 1) Если у вас текстовый файл сохранен в UTF-8 (типа стандарт для Java) и первая строка начинается с слова world, это слово засчитано не будет! А если 1251, то будет. И в нормальных тестах это должно было бы быть как-то учтено. Ведь слово-то есть! возможно есть и другие проблемы, связанные с кодировкой. 2) Символ "_" идёт за знак препинания. А вот знак ">" уже нет.
Тимур Гордеев
Уровень 22, Йошкар-Ола
21 мая, 18:11
Что значит регулярное выражение?: String replacedString = text.toString().replaceAll("\\p{P}", " "). replaceAll("\\s", " ");
Igor
Уровень 20, Киев, Ukraine
23 мая, 12:37
Если не ошибаюсь, то replaceAll("\\p{P}", " ") делает замену всех знаков пунктуации во всей строке на пробел, а replaceAll("\\s", " "), уже потом удаляет дублирующие пробелы.
Олег
Уровень 32, Москва, Russian Federation
21 мая, 08:14
Я такой думал щас всех обдурю, в чаровский массив все загоню и просто посчитаю совпадение следующих букв, ну типа i + 1 == 'o' и так далее. А когда дошло, что надо еще проверить, чтобы перед словом world букв не было, и после, а менять концепцию уже лениво... вобщем начался тяжелый труд)
Олег
Уровень 32, Москва, Russian Federation
21 мая, 08:19
А правильное решение от джавараш, конечно, не нужно объяснять, а то небось еще регулярными выражениями научимся пользоваться. А мы ведь не за это платили, а за то чтобы идти самим в интернет учиться.
Дмитрий
Уровень 32, Минск, Беларусь
19 мая, 17:46
Валидатор говорит: "Программа должна выводить в консоль количество слов "world", которые встречаются в файле. рекомендация от ментора. Убедись, что программа выводит только одно целое число, и никаких лишних надписей.". Кто ни будь знает как с этим бороться? Я даже ln убрал при выводе в консоль!!!
MapXyZ
Уровень 33, Минск, Belarus
26 мая, 09:20
У меня так выводило когда я забыл убрать вывод тестовых полей в консоль (это был в том числе перевод строки, т.е. //System.out.println();)... а я забыл его убрать.. Понимаю Вам уже скорее всего неактуально.. может кому пригодится.
Igor Petrashevsky
Уровень 34
17 мая, 20:13
Валидатор не смог в Matcher.results().count(); от J8 , локально все работает, например. Пришлось переправлять под J7. Делал regex, так интересней, чем циклы гонять. 9 попыток, у кого больше? :)