java—使用流从文件中逐字存储< t>

2guxujil  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(325)

我正在学习使用stream,并尝试在一个没有scanner.hasnext()的文件中获取所有包含元音且单词长度大于4的单词。

以文件为例,我想编写如下代码

Stream<String> text = Files.lines(Paths.get(example.txt));
List<String> result = text.filter(w->w.length()>4)
.filter(w -> w.contains("a")||w.contains("e")||
w.contains("i")||w.contains("o")||w.contains("u")).collect(Collectors.toList());
System.out.println(result);

我想得到的结果是

There bunch vowels example vowel

但它返回与文本相同的字符串。
我只知道使用stream逐行读取文本文件,但我想让它逐字读取(或者从每行中分割字符串)
有人能帮帮我吗?

ogsagwnx

ogsagwnx1#

你可以试试下面的代码片段

List<String> result = Files.lines(Paths.get("/tmp/examples.txt"))
                                   .flatMap(line -> Arrays.stream(line.split("\\W+")))
                                   .filter(w -> w.length() > 4)
                                   .filter(w -> w.matches(".*[aeiou].*"))
                                   .collect(Collectors.toList());

System.out.println(result);

正则表达式拆分单词: "\\W+" :一个或多个非单词字符序列。
注:
这种方法的问题在于 foo'sbar 将被分成两个单词 foo 以及 sbar . 如果你想排除 ' 作为拆分器,可以使用 [\W&&[^']]+ . 请以这种方式在表达式中包含所有有效字符。
输出:

[There, bunch, vowels, example, vowel]

相关问题