JavaRush
AI Academy
new
Акция
Университет
Java FullStack
Python FullStack
AI Native Developer
new
Web FullStack
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема
Вопрос
  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Все вопросы
JavaRush/Помощь по Java задачам/Подскажите пжл почему не принимает валидатор
Дима Шевчук
22 уровень
  • 23.01.2019
  • 737просмотров
  • 12комментариев

Подскажите пжл почему не принимает валидатор

Вопрос по задаче Считаем слово
Java Core,  9 уровень,  5 лекция
Решен

Считать с консоли имя файла.
Файл содержит слова, разделенные знаками препинания.
Вывести в консоль количество слов "world", которые встречаются в файле.
Закрыть потоки.

Требования:
  • Программа должна считывать имя файла с консоли (используй BufferedReader).
  • BufferedReader для считывания данных с консоли должен быть закрыт.
  • Программа должна считывать содержимое файла (используй FileReader c конструктором принимающим String).
  • Поток чтения из файла (FileReader) должен быть закрыт.
  • Программа должна выводить в консоль количество слов "world", которые встречаются в файле.
....
package com.javarush.task.task19.task1907; /* Считаем слово */ import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; public class Solution { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String file = reader.readLine(); reader.close(); FileReader readerFile = new FileReader(file); char[] buffer = new char[1000]; readerFile.read(buffer); readerFile.close(); String str = String.valueOf(buffer); String[] array = str.split("\\W"); int count = 0; for (String value : array){ if (value.equals("world")) count++; } System.out.println(count); } }
0
Комментарии (12)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Артем DivertittoSenior Android-разработчи в United TechMaster
24 января 2019, 10:20решение
Символ переноса строки замени на пустую строку
+2
Bahis
Уровень 41
23 января 2019, 18:39
Ты сплитишь только по \W... Я заменил все символы на пробелы, а потом сплитил по ним. О... Еще одна идея... Сплить по слову. Нужное тебе количество: размер массива-1.
0
Дима Шевчук
Уровень 22
23 января 2019, 20:11
я пробовал сплитить по слову, валидатор не принимает. вся боль в том, что результат на выходе у меня соответствует заданию при разных вариациях входных данных. но валидатор тем не менее не принимает(
0
Bahis
Уровень 41
23 января 2019, 20:15полезный
Ну я тогда по другому не умел и заменил все знаки на пробелы:
String q = s.replaceAll("[!@#$%^&*()_+/.,\\-=?:;№'\"|{}\\[\\]]"," ");
String[] strings = q.split(" ");
а потом сплитил по ним.... Сейчас бы сделал по другому.
+1
Sergey Moroz
Уровень 26
Expert
24 января 2019, 00:25полезный
Подытоживая предыдущих ораторов, наиболее выгодным вариантом будет: - во-первых, считывание из файла построчно, а не побайтово (даст возможность не париться с переносами строки и размером входящего файла) - во-вторых, допилить идею Bahis и сплит производить по world, но по полному слову (это важно, т.к. в тексте могут быть сочетания worldworld и они не должны засчитываться) - раз уж посмотрел в сторону регулярок, найди как парсить цельные слова (модификатор \b - если что)
+1
IceBerg
Уровень 41
Master
24 января 2019, 02:04
И как дальше быть? "world" - длина "0" "world,xxxx" - длина "2" "world,world" - длина "2" (норм) "world,world,xxxx" - длина "3" Bahis, и в чём проблема сплита по "\\W+" если это и есть все символы/пробелы?
0
Sergey Moroz
Уровень 26
Expert
24 января 2019, 02:53полезный
Изыскал же ж :) Ок, тогда допиливаем дальше: 1. замена целого "world" на " world " (окружаем пробелами для верности) 2. сплит по целому "world" 3. искомое значение = длина массива - 1
+1
IceBerg
Уровень 41
Master
24 января 2019, 11:23
Ок, так можно)) Но зачем так усложнять, если у автора есть уже верное решение делить по "\\W+"? Лично я просто искал все совпадения слова "while(matcher.find())" увеличивая счетчик в цикле.
0
Ваня Жуков
Уровень 40
23 января 2019, 18:28
Как минимум, если файл длиннее 1000 символов, то точно не сработает.
0
Дима Шевчук
Уровень 22
23 января 2019, 20:08
а как в даном случае можно обойтись без инициализации массива?
0
IceBerg
Уровень 41
Master
23 января 2019, 23:56полезный
Запихни readerFile в BufferedReader и просто потом считывай строки.
+1
Ваня Жуков
Уровень 40
24 января 2019, 05:13
Читай файл в цикле, используя конкотинацию.
0
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush