使用java流获取字符串占位符列表

使用java流获取字符串占位符列表,java,string,java-8,java-stream,Java,String,Java 8,Java Stream,我有一个包含多个占位符的字符串,如果我们可以借助java streams一次性收集所有占位符,有什么方法吗 输入: <Html> <Table> <TR><TD>||BuySell||</TD></TR> <TR><TD>||ExchangeName||</TD></TR> </Table> </Html> ||买卖|| ||

我有一个包含多个占位符的字符串,如果我们可以借助java streams一次性收集所有占位符,有什么方法吗

输入:

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

||买卖||
||交换胺||
输出:

<Html>
 <Table>
  <TR><TD>||BuySell||</TD></TR>
  <TR><TD>||ExchangeName||</TD></TR>
 </Table>
</Html>      
列表占位符=[BuySell,ExchangeName]

这可以使用助手函数来完成

    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());

BiFunction这可以使用helper函数来完成

    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());

bifunction是HTML中的输入,您首先需要解析它?@Sweeper,谢谢您的回复。不,这是一根绳子。我已经将固定的html模板分解为字符串的不同子模板。你有吗?在我看来,您在这里显示的输入像是一个HTML字符串,而不是“字符串的不同子模板”,不管这意味着什么。你能澄清一下吗?@sweeper,谢谢你的耐心。我的意思是输入是一个字符串。是的,我现在知道输入是一个字符串,但它是HTML吗?如果是这样,您应该使用HTML解析器。您使用的是HTML解析器吗?输入是HTML格式的,您首先需要对其进行解析吗?@Sweeper,谢谢您的回复。不,这是一根绳子。我已经将固定的html模板分解为字符串的不同子模板。你有吗?在我看来,您在这里显示的输入像是一个HTML字符串,而不是“字符串的不同子模板”,不管这意味着什么。你能澄清一下吗?@sweeper,谢谢你的耐心。我的意思是输入是一个字符串。是的,我现在知道输入是一个字符串,但它是HTML吗?如果是这样,您应该使用HTML解析器。您正在使用HTML解析器吗?