【问题标题】:getting a list of string placeholders using java stream使用java流获取字符串占位符列表
【发布时间】:2019-08-04 03:53:43
【问题描述】:

我有一个带有多个占位符的字符串,如果我们可以在 java 流的帮助下一次性收集所有占位符,有什么办法吗?

输入:

<Html>
 <Table>
  <TR><TD>||BuySell||</TD></TR>
  <TR><TD>||ExchangeName||</TD></TR>
 </Table>
</Html>      

输出:

List<String> placeholders = [BuySell,ExchangeName]

【问题讨论】:

  • 是 HTML 中的输入,您首先需要解析它吗?
  • @Sweeper,感谢您的回复。不,它是一个字符串。我已将固定的 html 模板分解为不同的字符串子模板。
  • 有吗?不过,您在此处显示的输入在我看来就像一个 HTML 字符串,而不是“字符串的不同子模板”,无论这意味着什么。你能澄清一下吗?
  • @Sweepr,感谢您的耐心等待。我的意思是输入是一个字符串。
  • 是的,我知道输入现在是一个字符串,但它是 HTML 吗?如果是这样,您应该使用 HTML 解析器。你在使用 HTML 解析器吗?

标签: java string java-8 java-stream


【解决方案1】:

这可以使用辅助函数来完成。

    BiFunction<Matcher, Function<Matcher, Object>, Collection<?>> placeHolderExtractor = (mch, extracter) -> {
        List<Object> list = new ArrayList<>();
        while(mch.find()) {
            list.add(extracter.apply(mch));
        }

        return list;
    };

    String htmlStr = "<Html> <Table>  <TR><TD>||BuySell||</TD></TR>  <TR><TD>||ExchangeName||</TD></TR> </Table></Html>";
    String regex = "(\\|\\|)([\\w]+)\\1";

    Pattern pattern = Pattern.compile(regex);
    Matcher matcher =  pattern.matcher(htmlStr);

    List<String> placeHolderList = placeHolderExtractor.apply(matcher, macher -> macher.group(2))
    .stream()
    .map(String::valueOf)
    .collect(Collectors.toList());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多