java - 使用 Stream 从文件中逐字存储
问题描述
我正在学习使用 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 在文本文件中逐行读取,但我想让它逐字读取(或从每一行拆分字符串。)
有人请帮帮我吗?
解决方案
您可以尝试以下代码段
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
会被分成 2 个单词foo
和sbar
. 如果要排除'
作为拆分器,可以使用模式[\W&&[^']]+
。请以这种方式在表达式中包含所有有效字符。
输出:
[There, bunch, vowels, example, vowel]
推荐阅读
- android - 我可以在执行航点任务时向任何方向旋转飞机偏航吗?
- python - Django中多对多字段的PATCH
- ios - 使用 Socket 从浏览器读取请求后如何发送响应?(我正在使用 SwiftSocket)
- python - 我怎样才能让这段代码不仅仅包含循环中的第一次出现?
- c - 我的平衡支架解决方案有什么问题?
- android - 为什么广播接收器不能在服务内部连续工作
- java - Kafka Streams:刷新中间窗口结果,因为提交间隔和窗口时间不同步
- image - 如何使用引导程序“flex”类将文本包装在图像周围,严格不使用浮点数?
- angular - 我想以角度分享表单(文本区域)值
- javascript - 在滚动功能上隐藏导航栏