• ,

package com.javarush.test.level19.lesson05.task02;

Здравствуйте, знаю что простенькая задачка но не могу понять почему не принимает, подскажите пожалуйста. Проверяю на: world world world? world! world. World
Вывод: 6
package com.javarush.test.level19.lesson05.task02;

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

import java.io.*;

public class Solution {
    public static void main(String[] args) throws IOException{
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        BufferedReader reader1 = new BufferedReader(new FileReader(reader.readLine()));


        String stroka = "";
        while(reader1.ready())
        {
            stroka = reader1.readLine();
            String stroka2 = stroka.replace("?", "").replace("!", "").replace(".", "").replace(",", "");
            String[] array = stroka2.toLowerCase().split(" ");
            int count = 0;
            for (int i = 0; i < array.length; i++)
            {

                try{
                   if (array[i].equals("world")){

                       count++;
                   }


                } catch (Exception e) {}
            }
            System.out.println(count);

        }
        reader.close();
        reader1.close();

    }
}

108 комментариев

GDove
  • GDove
  • 0
  • Комментарий отредактирован 2014-09-04 12:23:57 пользователем GDove
там может быть любой текст, даже такой — worldworldworld. слюбыми знаками препинания :;'. я делал через регулярные выражения вроде.
nevazno
Так что все знаки препинания нада перечислять?
если текст будет такой: world world world? world! world. World worldworldworld. Ответ будет 9, правильно?
GDove
да
rmk
мне почему -то кажется, что 8
rmk
разобрался, 6 должно быть
Alex_2014
  • Alex_2014
  • 0
  • Комментарий отредактирован 2014-11-13 14:24:18 пользователем Alex_2014
<code>import java.io.*;

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); // считываем имя файла
        FileInputStream inFile = new FileInputStream(reader.readLine()); //открываем поток считывания из файла


        byte[] str = new byte[inFile.available()]; // считываем
        inFile.read(str);
        String text = new String(str);


        int count = (text.length()-text.replaceAll("world", "").length())/"world".length(); // подсчитываем количество повторений слова
        int count1 = (text.length()-text.replaceAll("World", "").length())/"World".length();
        System.out.println(count+count1);

        reader.close();
        inFile.close();


        }

    }
</code>
Всем доброго времени суток!
Читает любой текст и слитный и со знаками препинания и подряд без пробелов. Проверку не прошел, как с заглавной первой, так и без строчки, в которой это указывается. Единственный минус слово worlds тоже плюсанет, — может причина в этом?
Строка World. world, worldworldworld; worlds world!!1 @#%&worldghf lkjlworld — по итогу 9.
Alex_2014

import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); // считываем имя 

файла
        FileInputStream inFile = new FileInputStream(reader.readLine()); //открываем поток считывания из 

файла


        byte[] str = new byte[inFile.available()]; // считываем
        inFile.read(str);
        String text = new String(str);

        String patternString = "world";

        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(text);

        int count1 = 0;
        while(matcher.find()) {
            count1++;
        }

        System.out.println(count1);

        reader.close();
        inFile.close();

    }
}

тоже проверку не проходит:(
GDove
lkjlworld — это не слово «world», это какое-то другое слово.
GDove
  • GDove
  • 0
  • Комментарий отредактирован 2014-09-04 12:35:35 пользователем GDove
Обманул я тебя. с другой задачей перепутал. world не идут подряд, но могут заканчиваться на любой знак не букву
nevazno
  • nevazno
  • 0
  • Комментарий отредактирован 2014-09-06 13:37:37 пользователем nevazno
стоп, сам нашел ошибку
nevazno
  • nevazno
  • 0
  • Комментарий отредактирован 2014-09-06 14:24:17 пользователем nevazno
решил наконецто )
panferowa
Чтож за ошибка-то была? Застрял на этой задаче конкретно!
panferowa
  • panferowa
  • 0
  • Комментарий отредактирован 2014-09-07 21:09:58 пользователем panferowa
Люди подскажите что я не так делаю? Если в файле последнее слово world то в этом цикле оно не соответствует сравниваему.

int count = 0;
        for(int i = 0; i < array.length; i++) {
            String arrString = array[i];
            if(arrString.equals("world")) {
                count++;
            }
        }


Сам код:

<code>package com.javarush.test.level19.lesson05.task02;

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

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;

public class Solution {
    public static void main(String[] args) throws Exception{

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        String filename = reader.readLine();

        FileReader fileReader = new FileReader(filename);

        String string1 = "";
        String string2 = "";
        String[] array = null;

        while (fileReader.ready()) {
            string1 = string1 + (char)fileReader.read();
            string2 = string1.replace(",", "").replace(".", "").replace("!", "").replace(":", "").replace(";", "");
            array = string2.toLowerCase().split(" ");
        }


        int count = 0;
        for(int i = 0; i < array.length; i++) {
            String arrString = array[i];
            if(arrString.equals("world")) {
                count++;
            }
        }

        System.out.println(count);

        reader.close();
        fileReader.close();

    }
}
</code>
Vash_the_Stampede
Vash_the_Stampede
как вариант, можно шуткануть, что ты не все знаки убрал, но твое решение не очень хорошее. Можно сканером попробовать решить, попробуешь?
panferowa
Придется…
panferowa
Спасибо за подсказку. Решил задачу используя сканер и useDelimiter("[^\\p{L}\\p{M}]+");
kiruxam
Решил задачу используя буфер. Считывал весь файл. брал по 5 байт, преобразовывая в строку и сравнивал с искомым словом. Решение не совсем хорошее. Можно считывать по 5 байт в буфер. И не забыть, что остаток может быть меньше 5 байт.
Lim
странно, ведь искомое слово может не попасть во взятые 5 байт:
p world world f world gr
И всё полетит…
kiruxam
  • kiruxam
  • 0
  • Комментарий отредактирован 2015-02-27 20:25:23 пользователем kiruxam
Не дописал, что брал 5 байт, сдвигая на байт…
MindIbniM
Лишний раз убеждаюсь, что не стоит усложнять. Исходил из того, что слово world может находиться в тексте в любом месте, в окружении любых символов и т.п. На практике, все очень просто: искомое слово именно world, именно в нижнем регистре. Выделяется пробелами, хотя то, что между этими пробелами, может содержать не только world.
Sergey_java
Напишите пожалуйста строку для проверки и количество слов, которое должно вывести в консоль в итоге.
Sabat
world!!1 @#%&worldghf lkjlworld
вывод: 3
rmk
жесть, особенно посл два… а afdsafworldasdfdsf тоже считается?
Sabat
  • Sabat
  • 0
В данной задаче, подразумевается что в файле есть некое множество строк в которых слова разделены пробелами, и необходимо проверить каждое слово на наличие следующей последовательности символов: «world» (помимо других символов, если таковые имеются). И остается только вывести количество найденных совпадений на консоль.
justw1cked
Решил через Pattern/Matcher. Пока дошёл до этого, проклял всё. Зато этот вариант позволяет уложить поиск в +-6 коротеньких строк.
SmartBro
спасибо за совет. Я перед этим мудрил и коряво сделал. А с матчером так изящно получилось
eugensn
а по какому шаблону искали?
elwood
Помогите, пожалуйста, никак не могу пройти проверку.
Работает правильно, а проверку не проходит.


package com.javarush.test.level19.lesson05.task02;

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

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStreamReader;

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        BufferedReader fileReader = new BufferedReader(new FileReader(reader.readLine()));

        String world = "world";
        int count = 0;
        String line;

        while(fileReader.ready()) {
            line = fileReader.readLine();
            String[] words = line.split(world);
            count += words.length;
        }

        System.out.println(count);

        reader.close();
        fileReader.close();

    }
}
valosatyi
elwood Твой код не до конца рабочий, вот доделанный вариант:
mport java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;

public class Solution {
    public static void main(String[] args) throws Exception{
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String fileName = reader.readLine();
        BufferedReader fileReader = new BufferedReader(new FileReader(fileName));
        int count =0;
        while (fileReader.ready()){
            String readString = fileReader.readLine();
            String[] strings = readString.split("world");
            count = count+strings.length;
            if(!readString.substring(readString.length()-5, readString.length()).equals("world")) count--;
        }
        reader.close();
        fileReader.close();
        System.out.println(count);
    }
}


P.S. Он тоже не принимается:)
SmartBro
логика хоть и интересная, но нерабочая.
Представь, что
1) встречается такой участок текста worldworldworld
2) есть строки текста, в которых world не встречается
3) world находится в самом начале или конце строки
Golodniy
Таки да, Pattern/Matcher упрощает.
Описание с подсчётом количества совпадений
tutorials.jenkov.com/java-regex/matcher.html
Windrush

public class Solution {
    public static void main(String[] args) throws IOException
    {
        BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
        FileReader reader = new FileReader(rd.readLine());
        BufferedReader readFile = new BufferedReader(reader);
        int count = 0;
        while (reader.ready())
        {
            String str = readFile.readLine();
            Pattern p = Pattern.compile("world");
            Matcher m = p.matcher(str);

            while (m.find()){
                count +=1;
            }
        }
        System.out.println(count);
        rd.close();
        reader.close();
    }
}


Да что не так? Условие же абсолютно выполнено, все работает.
vsvld
Та же проблема, код аналогичный. Вообще понять не могу, что не так.
eugensn
Решили? В итоге, что нужно искать? Регистрозависимо?
vsvld
Вернулся к этой задаче:)
Решил, и если ещё актуально — следует учитывать и большую букву ([wW]), и символы, не образующие слово вокруг него (\b).
djigurda71
плюсик тебе. Очень помог этим \b
eugensn
По идее, должно быть что-то вроде:
Pattern.compile(".*world.*");
moreno
  • moreno
  • 0
  • Комментарий отредактирован 2014-11-04 16:45:18 пользователем moreno
Оцените и мой код, пожалуйста:
import java.io.*;

public class Solution {
    public static void main(String[] args) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String filename = "";
        try {
             filename = reader.readLine();
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        final String wordToFind = "world";
        StringBuilder stringBuilder = new StringBuilder();

        try {
            FileReader fileReader = new FileReader(filename);
            while (fileReader.ready()) {
                stringBuilder.append((char)fileReader.read());
            }
            fileReader.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        int cursor = 0;
        int counter = 0;
        while (cursor != -1) {
            cursor = stringBuilder.indexOf(wordToFind, cursor);
            if (cursor != -1) {
                cursor += wordToFind.length();
                counter++;
            }
        }
        System.out.println(counter);
    }
}

С моими тестовыми данными всё проходит. В чём может быть ошибка?
Заранее спасибо :)
maxim343
import java.io.*;
public class Solution
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String file1 = reader.readLine();
        reader.close();

        String key = "world";
        reader = new BufferedReader(new FileReader(file1));
        String result = "";
        while (reader.ready())
        {
            result += reader.readLine() + " ";
        }
        reader.close();
        int frequent = getFreqOf(result, key);
        System.out.println(frequent);
    }

    private static int getFreqOf(String line, String key)
    {
        if (line.contains(key))
        {
            int lastIndex = line.lastIndexOf(key);
            return getFreqOf(line.substring(0, lastIndex), key) + 1;
        } else return 0;
    }
}

Что же не так?
moreno
Выше писали, что сравнивать нужно без учета регистра (Вот). Хотя у меня всеравно не прошло.
maxim343
Применил toLowerCase() ничего не изменилось, дело не в этом.
Все потоки закрываю, алгоритм подсчёта корректный(по-моему). Не пойму почему не проходит.
maxim343
hubert О, Боги, в чём же моя ошибка?
maxim343
Как было сказано выше и затем ниже, слово «world» в тексте отделяется от других слов пробелами или иными знаками препинания. Например, при вводе строки: "World, tra-ta world. World? world blablaworld worldwide, unworldy world." программа должна выдать 5. Ошибка моя была в том, что я подсчитывал и зачеркнутые слова. Решить задачу можно, используя регулярные выражения( [\\p{Punct}] — любой знак пунктуации, мне пригодилось).
Eva_Sky
С примером задание разъяснилось. Спасибо. Я, правда, использовала не «любой знак пунктуации», а границу слова "\b"
khavronsky
Спасибо, тоже смог решить с регулярным выражением string.split(\\b)
Courier_from_heaven
У меня совсем всё плохо? подскажите пожалуйста как решить эту задачу?
public class Solution {
    public static void main(String[] args) throws IOException
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        Scanner scanner = new Scanner(new File(reader.readLine()));
        ArrayList<String> list = new ArrayList<String>();

        while (scanner.hasNext()){
                String st = scanner.nextLine();
                list.add(st);
        }
        int count = 0;
        for(int j = 0 ; j< list.size();j++){
            char[] x = list.get(j).toCharArray();
            for(int i = 0; i < x.length-4;i++){
                if(x[i]=='w'&& x[i+1]=='o'&&x[i+2]=='r'&&x[i+3]=='l'&&x[i+4]=='d'){
                    count++;
                }
            }
        }
        System.out.print(count);
        scanner.close();
        reader.close();
    }
}
moreno
Насколько я понял по предыдущим постам слова типа World worlD тоже считаются
Courier_from_heaven
Решил, по другому. Просто нужно понять что такое слово. Слово это набор букв, разделяющийся пробелами или другими знаками пунктуации.
eugensn
Очередная засада от разработчиков. Снова нужно угадывать, что имеется в виду под словом «world»…
hubert
  • hubert
  • 0
  • Комментарий отредактирован 2014-11-07 15:19:09 пользователем hubert
Ребята: уже несколько раз писал по этой задаче — ничего такого в тестах нет. Есть обычный текст. Да, там может искомое слово быть с большой буквы (от этого слово не перестает быть другим), может заканчиваться предложение этим словом (логично, что в конце предложения ставим точку, без каких либо пробелов). Все банально и просто. А тест считает, сколько ваша программа насчитает нужных слов в нем. Уж поверьте, что посчитать ручками, а потом забить в тест нужное число, мы как-то осилим. Других тестов нет.
moreno
  • moreno
  • 0
  • Комментарий отредактирован 2014-11-07 16:57:32 пользователем moreno
Значит задача сводится к обработке всех случаев употребления слова в сочетании со знаком препинания (или без него). Так? В любом случае спасибо за подсказку. Увидел, в чём был неправ. Хотя и не сдал пока задачу.
larinje
простите, а если слово world будет в кавычках или скобках…
vgoroveckiy
На тесте отрабатывает как нужно, но не принимается. Дайте что ли тестовую строку правильную. А то не понятно, что имеется ввиду. world в виде отдельного слова или слово может содержать world? В общем непонятки с условием.

public class Solution {
    public static void main(String[] args) throws IOException {

        BufferedReader readerCons = new BufferedReader(new InputStreamReader(System.in));
        FileInputStream fileInputStream = new FileInputStream(readerCons.readLine());
        String str = "";

        while (fileInputStream.available() > 0){
            str += ((char)fileInputStream.read());
        }

        String[] strArr = str.toLowerCase().split("[\\p{Punct} ]");

        int count = 0;
        for (String s : strArr) {
            if (s.equals("world")) {
                count++;
            }
        }
        System.out.println(count);
        readerCons.close();
        fileInputStream.close();

    }
}
hubert
на 1 коммент выше религия не позволяет поднять глаза?
vgoroveckiy
все перечитал. Учитываем
1. только слова world.
2. в качестве разделителя могут быть пробелы и.или знаки препинания.
Что ещё не так?
vgoroveckiy
Тестовую строку в студию! Чтобы не было разночтений.
vgoroveckiy
Вопрос закрыт. Добрые люди поделились тестовым файлом. Баг найден.
B0gdan
  • B0gdan
  • 0
  • Комментарий отредактирован 2014-11-30 17:43:28 пользователем B0gdan
Что за баг? Скоро с ума сойду с этой задачей. Помогите, пожалуйста.
vgoroveckiy
Глянь мои посты на help.javarush.ru Я там по этой задаче долбался. В конце концов мне подогнали нормальный текстовый файл и я разобрался.
B0gdan
Тут написано только то, что вам помог какой-то тестовый файл, а самого тестового файла нету :(
B0gdan
  • B0gdan
  • 0
  • Комментарий отредактирован 2014-11-30 20:36:38 пользователем B0gdan
С 17й попытки Т_Т
\r\n
Спасибо! С меня галон нефти.
Dypemap
я думал к 19 лвл люди научились не делать лишней работы :) Русским по белому сказано что делать, к тому же за стопицот постов выше разобрали все сложности) задача простая.
moreno
  • moreno
  • 0
  • Комментарий отредактирован 2014-11-13 17:01:26 пользователем moreno
Пример файла:
World! world worlds whole world, world: worldwide world… world? eworld world. «world» worldworldworld world
Вывод: 9.
Что я не учёл?
Я скоро с ума сойду. Уже перешел на 20 уровень, но принципиально не хочу оставлять эту задачу.
Помогите, пожалуйста!
moreno
  • moreno
  • 0
  • Комментарий отредактирован 2014-11-13 17:19:19 пользователем moreno
Вот основной код:
int counter = 0;
        String text = stringBuilder.toString().toLowerCase().replaceAll("[^a-z ]", "");
        String[] words = text.split(" ");
        for (String word : words) {
            if (word.equals(wordToFind)) {
                counter++;
            }
        }

        System.out.println(counter);
moreno
  • moreno
  • 0
  • Комментарий отредактирован 2014-11-13 17:30:27 пользователем moreno
Прошел «лучше, чем 0% учеников» :(
Спасибо Alex_2014 за подсказку здесь
Globus51
world.world,world — должно считаться как 3 слова или как 0?
vsvld
как 3
MCFlower
Строка для тестов.
Wor
ld
world ld?world World, world.world223 sworld world. World,
вывод 4
v_kostomakha
  • v_kostomakha
  • 0
  • Комментарий отредактирован 2016-03-14 13:17:32 пользователем v_kostomakha
Спасибо, что мешал))) Вывод — 6!!! Тест пройден.
\b«text»\b — кому путь с матчером пришел в пору.
sergentum
че-то нифига не работает.
while (bufferedReader.ready()){
            String str = bufferedReader.readLine().toLowerCase();
            Pattern p = Pattern.compile("\\bworld\\b");
            Matcher m = p.matcher(str);

            while (m.find()){
                count++;
            }
        }
sergentum
призываю на помощь hubert . все тестовые строки из этого поста считает как надо. что не так?
Vadimmm
Попробуй так:

String[] worlds = result.split("[^a-zA-Z0-9]");
        for (String s : worlds) {
            if (s.equals("world"))
                countWorld++;
        }


Если не получится — выложи весь код.
sergentum
спасибо, уже сдал. валидатор рукожопый. во второй или третий раз уже сдаю решение которое работает некорректно.
Champion
MCFlower — спасибо за подсказку — тест прошел!
Overlord
/* Считаем слово
Считать с консоли имя файла.
Вывести в консоль количество слов "world", которые встречаются в файле.
Закрыть поток ввода.
*/

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedReader reader = new BufferedReader(new FileReader(br.readLine()));
        String s = "";
        s = reader.readLine();
        String[] buf = s.split("world");

        System.out.println(buf.length);
        br.close();
        reader.close();
    }
}


Вот мой код, выводит все так как надо. Жаль только сервером не принимается.
Lexw
  • Lexw
  • 0
  • Комментарий отредактирован 2015-06-14 16:12:23 пользователем Lexw
оригинально. но world может быть и в конце файла последним словом. тогда не посчитается.
И World тоже считать надо. hubert выше писал.
alexden
Вроде все ништяк выводит, а проверку не проходит
import java.io.*;
import java.util.regex.*;

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

public class Solution {
    public static void main(String[] args) throws FileNotFoundException, IOException {
    	BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    	
    	 BufferedReader fin = new BufferedReader(new FileReader(reader.readLine()));
    	 String s = "" ;
     	int c;
     	while((c=fin.read())!=-1){
     		s=s+(char)c;
     	}
    	Pattern pattern = Pattern.compile("world|World");
    	Matcher marcher = pattern.matcher(s);
    	int count = 0;
    	while(marcher.find()){
    		
    		count++;
    	}
    	System.out.println(count);
    	fin.close();
    	
    }
}
pokudjok
Решил. Ответ нашел здесь Your text to link...
bolshakov-as
Отличное решение. Спасибо
alexden
и так тоже не хочет работать
import java.io.*;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        FileInputStream fileInputStream = new FileInputStream(reader.readLine());
        ArrayList<String> list = new ArrayList<String>();
        String s = "";
        int count = 0;
        while(fileInputStream.available()>0){
            s+=(char)fileInputStream.read();
        }
        StringTokenizer stringTokenizer = new StringTokenizer(s," ");
        while (stringTokenizer.hasMoreTokens()){
            list.add(stringTokenizer.nextToken());
        }
        for (String i : list) if(i.contains("world")) count++;
        System.out.println(count);
        reader.close();
        fileInputStream.close();
    }
}
DooMer
мдя, 2 правильных решения и оба не хотят работать

int i = 0;
while(s.indexOf(«world»)!=-1)
{
s = s.replaceFirst(«world», "");
i++;
}

и второе

s.split(«world»,-1).length-1
NataliaIlchenko
Народ, объясните, пожалуйста, почему код ниже не принимается?
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.util.Scanner;

public class Solution {
    public static void main(String[] args) throws Exception{
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String fileName = reader.readLine();
        reader.close();

        Scanner scanner = new Scanner(new File(fileName)).useDelimiter("\\p{Punct}");
        int number = 0;
        while (scanner.hasNext())
        {
             if (scanner.next().contains("world")) number++;
        }
        System.out.println(number);
        scanner.close();
    }
}
Lexw
Потому что слова World тоже считать надо.
А у вас только world считает.
NataliaIlchenko
  • NataliaIlchenko
  • 0
  • Комментарий отредактирован 2015-10-15 10:59:27 пользователем NataliaIlchenko
И слова с большой буквы пробовала добавлять — не принимает.

Не люблю задачки на угадай, как выглядит файл, как в бонусных прошлого урока. :((
Lexw
попробуй через
FileReader file = new FileReader(reader.readLine());
возможно из-за сканнера не принимает, такое бывало
NataliaIlchenko
Решила :)… но не так.
BufferedReader-ом считывала строку из файла, убирала все знаки пунктуации, делила пробелами в массив, каждый элемент массива загоняла в нижний регистр и сравнивала со словом «world».
В примере считают именно выделенные слова (4 штуки):
Wor

ld

world ld?world World, world.world223 sworld world. World,

P.S. Считаю, что условие задачи неточно. И хорошо бы в нем давать хотя бы кусок файла. Угадай мелодию нервирует. Люди сдают с 10 попытки только потому, что не понимают, что от них требуется.
Lexw
Нас готовят к реальной жизни и реальным проектам… ;-)
NataliaIlchenko
В реальной жизни я из Пельша вытрясу четкое письменное задание. В противном случае, даже начинать работу над проектом не стану. )
mrserfr
большущее спасибо, благодаря Вам понял, что именно я не учитываю, плюсанул
mrserfr
«World», «sworld», «world.world223» — не засчитается
все знаки пунктуации — это \\p{PUNCT}
+ не забываем убрать возврат каретки и перенос строки

и вуаля
danila0703
Друзья, подскажите почему код не проходит тестирование? Делал тестовый файл на диске с различными комбинациями слова «world», результат верный.

package com.javarush.test.level19.lesson05.task02;

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

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Solution {
    private static final String WORD = "world";

    public static void main(String[] args) throws IOException
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        String fileName = reader.readLine();

        reader.close();

        FileReader fileReader = new FileReader(fileName);

        String line = "";
        char c;

        while (fileReader.ready()) {
            c = (char) fileReader.read();
            line += c;
        }

        int wordCount = count(line);

        System.out.println(wordCount);

        fileReader.close();
    }

    public static int count(String line) {
        int wordCount = 0;
        String subLine = line;

        while (subLine.contains(WORD)) {
            subLine = subLine.substring(subLine.indexOf(WORD) + WORD.length());
            wordCount++;
        }

        return wordCount;
    }
}
plankton
Эта задача просто взбесила. Долго мучился и решил с 30-й попытки. Так и не понял почему раньше мой код не принимался, хотя выдавал тот же результат, тестил на разных текстах разными способами. Подсказка: Данные из файла считал ридлайном, затем в полученной строке заменил все знаки препинания ("\\p{Punct}") на пробел и сплитил по пробелу, в полученном массиве подсчитывал совпадения с «world». И все это в цикле для каждого ридлайна!!! Когда сначала соединял все считанные из потока строки в одну и в ней считал слова «world», сервер не принимал!!! То же самое если считывать данные побайтно — сервер не принимает. Ищите только слово «world», а «World» или «worLd» и т.п. искать не нужно. Удачи.
Kydp9
я решил задачку с 19 попытки) ошибка была в том что считывал имя файла через Scanner.
получив имя файла через BuferReader задача прошла тестирование
Kydp9
Простите. сам дурак. потоки надо все все закрывать и не пропускать)
novant
Сначал обрадовался прочитав условие задачи, подумав Слава Богу задачи пошли попроше, но это оказалось не так.
Не понимаю что может быть еще не так, считал содержимое файла в строку — разбил её в массив по знакам препинания, подсчитал все ячейки массива эквивалентные — «world»

import java.io.*;

public class Solution {
    public static void main(String[] args)throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        FileInputStream reader = new FileInputStream(in.readLine());
        in.close();

        int count=0;

        byte[] buffer = new byte[reader.available()];
        reader.read(buffer);

        String text = new String(buffer);
        String[] mas=text.split("[\\p{Punct}]");

        for (int i=0;i<mas.length;i++){
            if ("world".equals(mas[i]))count++;
        }

        System.out.println(count);

        reader.close();
    }
}


Содержимое файла: worldworld,apps,...world,.star,world.world!,!world@@world..fworld?!sworld
Вывод 5
novant
И кто еще на help.javarush.ru не может зайти, кроме меня? Не удается получить доступ к сайту
novant
Охринеть задачка, прошла только когда добавил до всех знаков препинания еще и разделение по пробелу. Вот ответьте мне пожалуйста является ли пробел знаком препинания?

Условие задачи:… Файл содержит слова, разделенные знаками препинания…
novant
Да все таки пробел — знак препинания. И снова в школу
Wikipedia: Пробе́л — интервал между буквами, обозначающий границы слов во многих системах письменности. Функционально пробел принадлежит к знакам препинания.
Joysi
по моему, Вы рассматриваете world и World как разные слова/
novant
Как вся соль была не в этом а в учитывании пробела как знак препинания
sergentum
почему такой код ничего не ищет вообще?
Pattern p = Pattern.compile("\bworld\b");

показывает ноль, тогда как если \б убрать то будет не ноль.
sergentum
нашел. надо два обр. слеша
Corwin
Или как вариант можно использовать вот это:
replaceString = replaceString.replaceAll("[^\\w^\\d]", " ");

и дальше разделить на массив строк.
adil_sharipov
Я потупил-потупил и решил все байты кроме ворлдовских букв преобразовать в пробел. А дальше сплитом. Наверно, ужасное решение, но сервер принял:D
NikolayChernykh
Весьма странно работает валидатор потому как код ниже не принял:
package com.javarush.task.task19.task1907;

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

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String fileName = reader.readLine();
        FileReader fileReader = new FileReader(fileName);
        String line = "";
        while (fileReader.ready()){
            char c = (char) fileReader.read();
            line+=String.valueOf©.toLowerCase();
        }

        int count = 0;

        line = line.replaceAll("\\p{Punct}", " ");

        Scanner scanner = new Scanner(line);
        while(scanner.hasNext()){
            String word = scanner.next();
            if(word.equalsIgnoreCase("world") || word.contains("world")) count++;
        }
        System.out.println(count);
        scanner.close();
        reader.close();
        fileReader.close();
    }
}

Хотя код считает все слова, но в тоже время такой код:
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));

        FileReader inFile = new FileReader(reader.readLine());
        int count = 0;
        String str = "";

        while (inFile.ready()){
            char symbol = (char) inFile.read();
            str += String.valueOf(symbol).toLowerCase();
        }

        str = str.replaceAll("\\p{Punct}", " ");
        str = str.replaceAll("\n", " ");
        //System.out.println(str);

        String[] mas = str.split(" ");
        for(String s: mas){
            s = s.trim();
            if (s.equals("world"))
                count++;
        }

        System.out.println(count);
        reader.close();
        inFile.close();
    }
}

он с радостью сожрал, хотя при тестировании таким файлом:
World, tra-ta world. World? world blablaworld worldwide,
unworldy world.world
world!
он выплюнул "?", мой же код выплюнул «10» (там 10 слов).
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.