当前位置: 首页 > 面试题库 >

使用Java 8在文件中查找模式

潘泰
2023-03-14
问题内容

考虑我有一个文件喜欢(只是摘录)

name: 'foobar'

foobar当我发现与时,我喜欢检索name

我目前的做法是

Pattern m = Pattern.compile("name: '(.+)'");
try (Stream<String> lines = Files.lines(ruleFile)) {
    Optional<String> message = lines.filter(m.asPredicate()).findFirst();
    if (message.isPresent()) {
        Matcher matcher = m.matcher(message.get());
        matcher.find();
        String group = matcher.group(1);
        System.out.println(group);
    }
}

看起来不太好 过度使用模式和匹配器似乎是错误的。

有没有更简单/更好的方法?特别是如果我有多个键,我喜欢这样搜索吗?


问题答案:

我希望有更多类似的东西,以避免两次匹配模式:

Pattern p = Pattern.compile("name: '([^']*)'");
lines.map(p::matcher)
     .filter(Matcher::matches)
     .findFirst()
     .ifPresent(matcher -> System.out.println(matcher.group(1)));

也就是说,对于每个字符串的匹配器,获取第一个匹配的字符串,对于该匹配器,将输出第一组。



 类似资料:
  • 问题内容: 如果我在jape规则中写的词出现在同一句子中,则需要注释句子的一部分。例如,句子是“孩子不能抗拒对其常规的任何改变”。我在“ trouble.lst”文件中添加了诸如“ resist”之类的词,在“ alteration.lst”文件中进行了更改。现在,在这句话中,我需要将“抵制任何更改”部分注释为“ A3b”。我尝试使用以下代码,但未考虑同一句子中的单词。我的日本规则也是从不同的句子

  • 本文向大家介绍在Python中使用glob模块查找文件路径的方法,包括了在Python中使用glob模块查找文件路径的方法的使用技巧和注意事项,需要的朋友参考一下 glob模块是最简单的模块之一,内容非常少。用它可以查找符合特定规则的文件路径名。跟使用windows下的文件搜索差不多。查找文件只用到三个匹配符:”*”, “?”, “[]“。”*”匹配0个或多个字符;”?”匹配单个字符;”[]“匹配

  • 问题内容: 我有一个大约40万行的文本文件。我需要将此文本文件导入一个程序,该程序仅接受以空格或制表符分隔的文本文件,但是此文本文件以分号分隔。我要从(Arcmap)导出文本文件的程序中没有选项来更改分隔,并且在文本文件本身中进行查找和替换实际上需要2天。 我已经搜索了一个脚本来执行此操作,但是它们似乎都用空格替换了单词文件的整个LINE,而不是单独替换了每个分号,而给我留了一个空的文本文件。 这

  • 问题内容: 我使用此命令查找具有给定模式的文件,然后将其重命名为其他文件 运行此命令时,我看到一些类似的输出 但是最后,当我运行时,我看到了旧文件名。 问题答案: 您正在回显’mv’命令,而不是实际执行它。改成:

  • 问题内容: 我编写了以下方法来查找映射到最高值的键,然后尝试转换为java 。你能帮忙吗? 问题答案: 您可以通过以下方式获得一个钥匙 但不幸的是,没有内置函数可以获取所有等效的最大值。 最简单,直接的解决方案是先找到最大值,然后再检索映射到该值的所有键: “ 如何强制max()返回JavaStream中的所有最大值? ”中讨论了单次获取流的所有最大值的解决方案。”。您将看到,如果您的输入是普通的