栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

匹配模式并使用Java 8 Stream将流写入文件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

匹配模式并使用Java 8 Stream将流写入文件

不幸的是,Java正则表达式类不提供匹配结果的流,仅提供一种

splitAsStream()
方法,但您不想拆分。

注意:它已 在Java
9中
作为Matcher.results()添加。

但是,您可以自己为其创建通用帮助程序类:

public final class PatternStreamer {    private final Pattern pattern;    public PatternStreamer(String regex) {        this.pattern = Pattern.compile(regex);    }    public Stream<MatchResult> results(CharSequence input) {        List<MatchResult> list = new ArrayList<>();        for (Matcher m = this.pattern.matcher(input); m.find(); ) list.add(m.toMatchResult());        return list.stream();    }}

然后,您可以使用

flatMap()
以下代码来简化代码:

private static final PatternStreamer quoteRegex = new PatternStreamer(""([^"]*)"");public static void main(String[] args) throws Exception {    String inFileName = "c:\exec.log";    String outFileName = "c:\exec_quoted.txt";    try (Stream<String> stream = Files.lines(Paths.get(inFileName))) {        Set<String> dataSet = stream.flatMap(quoteRegex::results)   .map(r -> r.group(1))   .collect(Collectors.toSet());        Files.write(Paths.get(outFileName), dataSet);    }}

由于您一次只能处理一条线路,因此暂时

List
没有问题。如果输入字符串很长并且匹配很多,那么a
Spliterator
是一个更好的选择。请参阅如何创建正则表达式匹配流?



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/515752.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号