如何在StringTemplate v4中获取属性

时间:2014-10-29 06:47:41

标签: java stringtemplate-4

我有以下代码

String templateString = "Some Text $attribute1$ more text $attribute2$ more text"; 
ST stringTemplate = new ST(templateString ,'$','$');`

如何迭代所有属性,即attribute1,attribute2等? 我想在模板中获取所有属性列表。

1 个答案:

答案 0 :(得分:0)

在groovy中只使用这样的正则表达式,它似乎做了我现在需要的东西

   List<String> extractTemplateVariables( String statement ) {
    Pattern pattern = Pattern.compile( /\$(\w*)\$/ );
    def List<String> runTimeParms = []
    def matcher = pattern.matcher( statement )

    while (matcher.find()) {
        runTimeParms << matcher.group( 1 )

    }
    runTimeParms.removeAll( Collections.singleton( null ) );
    runTimeParms.unique( false )

}

但我被告知正确的方法是检查这样的事情:

   final int ID = 25
    char delimiter = '$'
    ST st = new org.stringtemplate.v4.ST( statement, delimiter, delimiter );

    def dataFieldNames = []
    def t = st.getAttributes(  )
    st.impl.ast.getChildren().each {

        if (it != null) {
            CommonTree child = it as CommonTree
            if (child.toString().equals( "EXPR" )) {
                if (child.getChildCount() == 1) {
                    CommonTree expressionChild = child.getChild( 0 )
                    if (expressionChild.getToken().getType() == ID) {
                        dataFieldNames.add( expressionChild.toString() )
                    } else if (expressionChild.toString().equals( "PROP" )) {
                        if (expressionChild.getChildCount() == 2) {
                            dataFieldNames.add(
                                    expressionChild.getChild( 0 ).toString() +
                                            "." +
                                            expressionChild.getChild( 1 ).toString() )
                        }
                    }

                }
            }
        }
    }

    dataFieldNames.unique( false )

}

但是我不明白结构或我在这里做的事情,而且它不仅仅是第一个。也许有人可以帮助我们弄清楚最好的方法是什么