Собственно считает верно, но последний пункт не пропускает.
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); // выводим колличеств
}