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

2024-01-04

我正在尝试读取一个巨大的文件并提取“引号”中的文本,然后将这些行放入一个集合中,并使用 Java 8 将集合的内容写入文件中Stream.

public class DataMiner {

    private static final Pattern quoteRegex = Pattern.compile("\"([^\"]*)\"");

    public static void main(String[] args) {

        String fileName = "c://exec.log";
        try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
            Set<String> dataSet = stream.
                    //How do I Perform pattern match here
                    .collect(Collectors.toSet());
            Files.write(Paths.get(fileName), dataSet);

        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

请帮我。谢谢!

编辑:问题的答案..

  1. 不,没有多重引用的文本。
  2. 我本可以使用简单的循环。但我想使用 Java 8 流

不幸的是,Java 正则表达式类不提供匹配结果的流,仅提供一个splitAsStream() https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#splitAsStream-java.lang.CharSequence-方法,但你不想拆分。

注:已经Java 9 中添加 https://bugs.openjdk.java.net/browse/JDK-8071479 as 匹配器.results() http://download.java.net/java/jdk9/docs/api/java/util/regex/Matcher.html#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() https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#flatMap-java.util.function.Function-:

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很好。如果输入字符串很长并且有很多匹配项,那么Spliterator将是一个更好的选择。看如何创建正则表达式匹配流? https://stackoverflow.com/a/28150956/5221149

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 在 Java 中连接和使用 Cassandra

    我已经阅读了一些关于 Cassandra 是什么以及它可以做什么的教程 但我的问题是如何在 Java 中与 Cassandra 交互 教程会很好 如果可能的话 有人可以告诉我是否应该使用 Thrift 还是 Hector 哪一个更好以及为什
  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • 如何默认将 Maven 插件附加到阶段?

    我有一个 Maven 插件应该在编译阶段运行 所以在项目中consumes我的插件 我必须做这样的事情
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List

随机推荐

  • 如何查找多列匹配的重复项

    我想在 X Y 和 Z 匹配的表中查找重复项 以最终清理由时间戳标识的旧表 Created X Y Z 1515622543 334 72 269 1515622544 334 72 270 1515622601 334 72 268 15
  • 如何在饼图中鼠标悬停时显示“%”符号

    我正在使用 UI 上绘制图表ChartJS 2 0 我能够渲染饼图 但我希望鼠标悬停时显示数据以及 标志 我如何附加 所以如果鼠标悬停我得到Rented 93我想看看Rented 93 请指导我 以下是我现在拥有的 var sixthSub
  • 检索包含嵌入对象的网页

    我想获取一个包含图像 Flash 动画和其他嵌入对象的网页 实现这一目标的直接方法是什么 用java编程语言编写一个网络爬虫 http java sun com developer technicalArticles ThirdParty
  • 使用 MySQL 查询结果填充下拉列表 (PHP/MySQL)

    正如标题所说 这是我目前编写的代码 认为它会起作用 但它不起作用 请注意 我的会话用户 ID 等正在工作 因为我可以将其打印在表单的另一个字段中 所以这不是问题 但我的保管箱中似乎没有任何内容 我已经在数据库上创建了与我登录的 user i
  • 如何实现一个程序来查找二维平面中的最短路径?

    如果在二维平面上没有 所有可能的二维形状 圆形 四边形 三角形 不规则形状 的障碍物 那么如何实现一种机制来找到障碍物周围的最短路径 我正在考虑使用 Visual C 因为它提供了许多图形类来绘制此类图形 我已经走了很远 1 首先我将使用
  • 如何在 Visual Studio 中禁用保存/修改的标记?

    例如 VS2022 显示绿色垂直线 行号旁边 作为已保存更改的指示符 如何禁用 隐藏这些标记 转到工具 选项 文本编辑器 常规并取消选中 跟踪更改 这应该禁用行号附近以及滚动栏中的绿线 已保存的更改 和黄线 未保存的更改
  • 无法评估 Blazor Webassemble API 调用子项

    我正在尝试使用新的 Blazor Webassemble 应用程序调用现有的 REST API 但是当我进行调用时 我总是收到错误无法对儿童进行评估 API 到达断点 当我单步执行时 它成功返回数据 如果我在邮递员中调用它 我也可以看到该数
  • 自定义 MPAndroidChart 中的图例

    我正在从事需要实施图表的项目中的项目 我决定使用MPAndroid图表 https github com PhilJay MPAndroidChart它工作得很好 但我需要做一些事情才能对我来说完美 First我可以将条形图更改为特定图像吗
  • Eclipse 不生成谷歌云端点客户端库

    我正在尝试创建我的第一个 GAE 端点应用程序 我想创建自己的个性化端点 而不是从类生成端点 这可能吗 我写过这个类 Api name my endpoint path my endpoint public class MyFirstEnd
  • 如何使用应用程序外部提供的新 Android M 功能“文本选择”?

    背景 Android M 提供了一种处理选定文本的新方法 链接here http developer android com intl ru about versions marshmallow android 6 0 changes ht
  • Fullcalendar:可拖动对象拒绝将 fullcalendar 视为可放置,即使 fullcalendar 接受放置

    我已经将 FullCalendar 设置为接受 drop 确实如此 但是我用 revert invalid 构造的可拖动对象似乎无法将 FullCalendar 上的日期识别为可放置的 并恢复回来 这是我的代码
  • json 编码的自定义替换未按预期输出双引号

    创建自己的 json 编码器后 我意识到它正在用两个转义反斜杠而不是一个反斜杠替换双引号 我现在意识到 C 有一个内置的Json Encode 方法 是的 我已经让它工作了 但是 我对为什么下面的代码 我构建的 json 编码器 没有像我期
  • 在 Android 上以编程方式打开/关闭 GPS [重复]

    这个问题在这里已经有答案了 可能的重复 像 Tasker 一样以编程方式启用 GPS https stackoverflow com questions 4721449 enable gps programatically like tas
  • 根据风味和构建类型构建要在代码中使用的 gradle 变量

    有没有办法在我的代码中使用 build gradle 中的变量 这取决于风味和 buildType 在此示例中 是否可以在 Gradle 中声明一个可在 Java 中使用的变量 https stackoverflow com questio
  • 未返回正确的 post 方法结果

    我正在尝试使用 php my sql 在 Windows Phone 8 登录功能中创建一个应用程序 我有以下 php 脚本 在我的 Windows Phone C 点击事件中 我写了以下内容 private void btnLogin C
  • 默认作为 switch 语句中的第一个选项?

    我已经测试过了 它工作得很好 但对我来说 它看起来 很奇怪 我是否应该担心这是非标准形式 将在 PHP 的未来版本中删除 或者它可能会停止工作 我总是将默认情况作为最终情况 而不是第一种情况 switch kind default The
  • Django 在 ModelForms 中继承 formfield_callback 的问题

    我现在才使用 Django 几个星期 所以我可能会采取各种错误的方法 但是 我有一个基本的 ModelForm 我在其中放入了一些样板文件 以尽可能保持干燥 而我所有实际的 ModelForm 都只是该基本表单的子类 这非常适合error
  • 哪个工具可以对 javac 的输出进行着色?

    我们有一个高度并行的构建过程 因此我经常必须浏览 javac 的大量输出来查找构建错误 为了使这更容易 如果有一些工具可以将 javac 到我的终端的输出着色 突出显示代码中的错误 那就太好了 我可以使用什么工具对 javac 的输出进行着
  • javascript中如何从字符串中提取浮点数

    我在 textarea 中有 xml 内容 其形式可以是
  • 使用 Java 8 Stream 匹配模式并将流写入文件

    我正在尝试读取一个巨大的文件并提取 引号 中的文本 然后将这些行放入一个集合中 并使用 Java 8 将集合的内容写入文件中Stream public class DataMiner private static final Pattern