【问题标题】:Iterate over regex in vavr在vavr中迭代正则表达式
【发布时间】:2020-05-19 06:56:00
【问题描述】:

在java中迭代正则表达式返回的匹配项的惯用方法是什么。

通常java方式如下(见How to iterate over regex expression

Pattern p = Pattern.compile("(\\w+)=(\\w+);");
Matcher m = p.matcher(line);
while (m.find()) {
    map.put(m.group(1), m.group(2));
}

除了在.find 之前调用.group 的可能错误之外,这是必须,因此不可组合。这意味着您需要创建中间结构来通过副作用存储数据。

如何利用 vavr 迭代器/集合的强大功能使用正则表达式?

【问题讨论】:

  • 您回答自己的问题并不意味着您的问题可能含糊不清 :) 您能否尝试让您的问题更清楚一点?
  • 我会努力改进的。

标签: java regex vavr


【解决方案1】:

使用这个简单的oneliner

  //given
  Pattern pattern = Pattern.compile("(\\w+)=(\\w+);");
  String line = "name1=gil;name2=orit;";

  Iterator<Matcher> all = 
    Iterator
      .continually(pattern.matcher(line))
      .takeWhile(matcher -> matcher.find());

  //use it like
  io.vavr.collection.Map<String,String> map = 
    all.toMap(m->m.group(1),m->m.group(2));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 2015-09-24
    • 2022-06-23
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多