Вы выполняете ненужную работу, разбивая строку на кучу строк, по одной на каждое слово, заполняя их массивом, просто чтобы потом узнать размер массива.
Если вы хотите получить количество слов, рассмотрите простой метод, считая только слова
private static final Pattern WORD = Pattern.compile("\\w+");
public static int wordCount(String s) {
int count = 0;
for(Matcher m = WORD.matcher(s); m.find(); ) count++;
return count;
}
Затем вы можете использовать этот метод внутри операции Stream, чтобы получить среднее количество слов:
Files.lines(Paths.get(filePath)).mapToInt(YourClass::wordCount).average().orElse(0)
В Java 9 вы можете переписать метод wordCount
, чтобы использовать поток, подобный
private static final Pattern WORD = Pattern.compile("\\w+");
public static int wordCount(String s) {
return (int)WORD.matcher(s).results().count();
}
Но цикл, вероятно, более эффективен, поскольку в нем опущено создание MatchResult
экземпляров.