September 2019
Intermediate to advanced
816 pages
18h 47m
English
Starting with JDK 9, the Scanner class comes with a method that returns a stream of delimiter-separated tokens, Stream<String> tokens(). If we treat the text to search as the delimiter of Scanner and we count the entries of the Stream returned by tokens(), then we obtain the correct result:
public static long countOccurrences( Path path, String text, Charset ch) throws IOException { long count; try (Scanner scanner = new Scanner(path, ch) .useDelimiter(Pattern.quote(text))) { count = scanner.tokens().count() - 1; } return count;}