Очень сильно мучают не точные задачи, не ясно как отлаживать.
У заказчика хоть можно уточнить и задать нужные вопросы, а тут
"Посчитал не все", "Посчитал слишком много"
В отладчике вижу все вхождения. Не рассмотрен только вариант, когда символ ввода стоит внутри слова "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 bReader = new BufferedReader(new InputStreamReader(System.in));
String inpFile = bReader.readLine();
bReader.close();
FileReader reader = new FileReader(inpFile);
String sWorld = "";
int data;
String sTmp;
while (reader.ready()) //пока есть непрочитанные байты в потоке ввода
{
data = reader.read (); //читаем один символ (char будет расширен до int)
if (!(data == 13 || data == 10))
sWorld += ((char) data) + "";
}
data = 0;
int count =0;
boolean bFound = false;
int smesh = 0;
while (true) {
smesh = sWorld.indexOf("world", data );
if (smesh >= 0 ) {
bFound = false;
if ( smesh == 0)
bFound = true;
if (!bFound) { // предыдущий символ
sTmp = sWorld.substring((sWorld.indexOf("world", data ) -1), (sWorld.indexOf("world", data ) ));
if ( sTmp.equals(",") || sTmp.equals(".") || sTmp.equals("!") || sTmp.equals("?") || sTmp.equals("\n") || sTmp.equals("\r") || sTmp.equals(" ") )
bFound = true;
}
if (smesh + 5 >= sWorld.length())
sTmp = " ";
else
sTmp = sWorld.substring((sWorld.indexOf("world", data ) +5), (sWorld.indexOf("world", data ) +6));
if (bFound)
if ( sTmp.equals(",") || sTmp.equals(".") || sTmp.equals("!") || sTmp.equals("?") || sTmp.equals("\n") || sTmp.equals("\r") || sTmp.equals(" ") )
count ++;
data = sWorld.indexOf("world", data ) +4;
}
else
break;
}
System.out.println( count);
reader.close();
}
}
нижнее подчеркивание кстати тоже