Собственно считает верно, но последний пункт не пропускает.
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String inFile = bufferedReader.readLine(); // читаем имя файла
        bufferedReader.close(); // закрыаем поток
        try (FileReader fileReader = new FileReader(inFile); //  для чтения из файла
             BufferedReader br = new BufferedReader(fileReader)){ //  для чтения из файла
            int count =0; // счетчик дя повторов
            while (fileReader.ready()){ // пока есть новые строки
              String string = br.readLine(); // читаем строку
              string = string.replaceAll("[?!:;. {}()]+",",");// заменяем все знаки на ,
              while (string.contains(",,")) // на вский случай проверяем на двойные знаки
                    string = string.replaceAll(",,",","); //  заменяем двойную ,,  на одинарную ,
              List<String> allStrings = Arrays.asList(string.split("\\W")); // добавляем все в массив
              for (String s:allStrings) { // для каждого элемента массива
                  if (s.equalsIgnoreCase("world")){ // проверяем на совпадение
                      count++; // если совпало увеличиваем счетчик
                  }// if
              } // for
            } // while
            System.out.println(count); //  выводим колличеств
        }