Как преобразовать строки в текстовом файле в поток символов / строк - PullRequest
1 голос
/ 01 февраля 2020

Мне нужно посчитать строки и слова в текстовом файле, пока я пытался что-то вроде этого:

File file = new File("C:\\output_form.txt");

Path path = Paths.get(file.getAbsolutePath());
long lineCount = Files.lines(path).count();

Stream<String> stream = Files.lines(path);

long numberOFWords = stream
            .map(line -> line.codePoints())
            .filter(character -> character.findAny().equals("a"))
            .count();
System.out.println("Lines: "+lineCount + "\n" +
        "Words: "+ numberOFWords);

Я хочу: -конвертировать строку файла в поток символов, -фильтровать каждый символ, который не является пробелом (я набрал .equals ("a), чтобы проверить, работает ли он), -считать его и сохранить в переменной numberOfWords

Вывод выглядит следующим образом:

Lines: 71
Words: 0

Любые советы о том, что я делаю неправильно?

1 Ответ

1 голос
/ 01 февраля 2020

Чтобы подсчитать количество слов, вы должны разбить строки, используя пробелы " " и flatMap каждое слово как String в Stream<String>.

long lineCount = Files.lines(path).count();
long numberOFWords  = Files.lines(path)
            .flatMap(line -> Arrays.stream(line.split(" "))) // this section
            .count();

Если вы хотите отфильтровать к любому указанному c типу слова можно добавить .filter после flatMap и до операции count.

В случае, если целью было захватить все символы, вы можете просто расширить вышеприведенное решение для flatMap строк с соответствующим им потоком символов.

long numberOfCharacters = Files.lines(path)
        .flatMap(line -> line.chars().mapToObj(c -> (char) c))
        .filter(c -> !c.equals(' '))
        .count();
...