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);
}
}
Дима Шевчук
22 уровень
Подскажите пжл почему не принимает валидатор
Решен
Комментарии (12)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Артем Divertitto Senior Android-разработчи в United Tech Master
24 января 2019, 10:20решение
Символ переноса строки замени на пустую строку
+2
Bahis
23 января 2019, 18:39
Ты сплитишь только по \W...
Я заменил все символы на пробелы, а потом сплитил по ним.
О... Еще одна идея... Сплить по слову. Нужное тебе количество: размер массива-1.
0
Дима Шевчук
23 января 2019, 20:11
я пробовал сплитить по слову, валидатор не принимает. вся боль в том, что результат на выходе у меня соответствует заданию при разных вариациях входных данных. но валидатор тем не менее не принимает(
0
Bahis
23 января 2019, 20:15полезный
Ну я тогда по другому не умел и заменил все знаки на пробелы:
а потом сплитил по ним....
Сейчас бы сделал по другому. +1
Sergey MorozExpert
24 января 2019, 00:25полезный
Подытоживая предыдущих ораторов, наиболее выгодным вариантом будет:
- во-первых, считывание из файла построчно, а не побайтово (даст возможность не париться с переносами строки и размером входящего файла)
- во-вторых, допилить идею Bahis и сплит производить по world, но по полному слову (это важно, т.к. в тексте могут быть сочетания worldworld и они не должны засчитываться) - раз уж посмотрел в сторону регулярок, найди как парсить цельные слова (модификатор \b - если что)
+1
IceBergMaster
24 января 2019, 02:04
И как дальше быть?
"world" - длина "0"
"world,xxxx" - длина "2"
"world,world" - длина "2" (норм)
"world,world,xxxx" - длина "3"
Bahis, и в чём проблема сплита по "\\W+" если это и есть все символы/пробелы?
0
Sergey MorozExpert
24 января 2019, 02:53полезный
Изыскал же ж :) Ок, тогда допиливаем дальше:
1. замена целого "world" на " world " (окружаем пробелами для верности)
2. сплит по целому "world"
3. искомое значение = длина массива - 1
+1
IceBergMaster
24 января 2019, 11:23
Ок, так можно)) Но зачем так усложнять, если у автора есть уже верное решение делить по "\\W+"? Лично я просто искал все совпадения слова "while(matcher.find())" увеличивая счетчик в цикле.
0
Ваня Жуков
23 января 2019, 18:28
Как минимум, если файл длиннее 1000 символов, то точно не сработает.
0
Дима Шевчук
23 января 2019, 20:08
а как в даном случае можно обойтись без инициализации массива?
0
IceBergMaster
23 января 2019, 23:56полезный
Запихни readerFile в BufferedReader и просто потом считывай строки.
+1
Ваня Жуков
24 января 2019, 05:13
Читай файл в цикле, используя конкотинацию.
0