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

  • 20
  • Недоступна
Считать с консоли имя файла. Файл содержит слова, разделенные знаками препинания. Вывести в консоль количество слов "world", которые встречаются в файле. Закрыть потоки.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (542)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Сергей <Т>
Уровень 30, Москва
7 сентября, 16:55
..Все гораздо проще через regex и их специальные классы (классы Pattern & Matcher). Хотя можно и String пользоваться тоже. Подсказка: "worldworld" не должно засчитываться как два слова "world".
Torba Z Dimom
Уровень 22, Киев, Украина
25 августа, 22:40
Задача перестает быть эпик и начинает быть изи когда начнете читать любую статью о регулярках. Обычно ответ что делать находиться в первых нескольких абзацах.
Максим Глотов
Уровень 33, Новосибирск
20 августа, 04:52
хм... получается что в логике задачи символ пробела тоже является знаком препинания? вот, например, в строке
world, world world\ world
по условиям задачи - должно быть выведено 2. но для валидатора пойдет только 4. Сначала удалил из строки все пробелы, а затем разделил по знакам препинания - не прошло.
Алексей
Уровень 19
13 августа, 08:34
Самый легкий эпик..) 1. Считываем по одному символу и передаем их в строку 2. С помощью split("\\W") преобразуем строку в массив строк. 3. Подсчитываем сколько там слов "world"
aleksdenni
Уровень 37, Полтава, Украина
23 августа, 18:10
Согласен , нажал проверку думал не пройдёт😸 Записал весь файл в стринг, проверил через регулярное выражение ("(\\b)(world)(\\b)") вывел счётчик.
Igor Stupnik
Уровень 30
11 августа, 06:01
нет не тянет на epic
Алексей Хехнев
Уровень 20, Санкт-Петербург
9 августа, 13:08
ВСЕ ОЧЕНЬ ПРОСТО: 1. В try-with-resources создаем объекты BufferedReader and FileReader 2. В блоке try-with-resources создаем ещё один объект BufferedReader и в качестве аргумента передаем ему наш FileReader 3. Создаем счетчик 4. В цикле пока буферу есть что считывать 5. Создаем строковый массив и передаем в него считанную строку буфера из файла, которая разделена знаками препинания -- buffReader.readLine().split("\\W") 6. Создаем цикл для перебора массива и в нем сравниваем каждое слово массива. Если совпало счетчик +1 7. Вывод счетчика на консоль ВСЕ ОЧЕНЬ ПРОСТО БЕЗ StringBilder-ов)))
Мирон
Уровень 39, Киев
2 сентября, 05:55
Collections.frequency(list,"word")
Alexandr Vlasov
Уровень 22, Москва
6 августа, 05:20
Может поможет кому, но если сканировать побитово и вычленять последовательности, то worldworld это не считается за два слова, это вовсе не искомое слово. Очень помогло разобраться
Михаил
Уровень 19, Санкт-Петербург
2 августа, 07:08
Да, правда, валидатор заточен под знаки препинания и пробелы. Переносы строк и перевод каретки также считает за разделители.
String[] s = str.replaceAll("[\\p{P}\\s]", " ").split(" ");
- работает Другие методы разделения строки у меня не дали результата - валидатор считает, что не все слова посчитал. Читал посимвольно и грузил в ArrayList, затем StringBuilder'ом клеил строку. Затем вышеуказанная операция и далее через
str.equals("world")
- регистр только как в задании, малыми буквами. ТЗ, как и во многих случаях составлено намеренно неправильно с упущением подусловий. Валидатор заточен под конкретную реализацию. К сожалению слишком много времени приходится тратить на эту бессмысленную угадайку. Хотя и не совсем без пользы.
Yarik Таксист в Яндекс.Такси
1 августа, 05:10
Только через регулярные выражения получилось правильно решить задачу.
Vladimir
Уровень 39, Тольятти, Россия
25 июля, 15:05
int i = 0
Scanner scanner = new Scanner(fir).userDelimeter("\W");
while (scanner.hasNext()){
if (scanner.next.equals("world) i++;
}
System.out.print(i);