2017-04-20 74 views
2

我已经做了一些研究,但我还没有找到适用于我的案例的工作代码。我有两个变量命名testtest2,我想将它们放在一个地图格式[test:valueof(test), test2:valueof(test2)]通过它的名字作为字符串访问变量值(groovy)

我的一段代码如下:

def test="HELLO" 
def test2="WORLD" 
def queryText = "\$\$test\$\$ \$\$test2\$\$ this is my test" 

def list = queryText.findAll(/\$\$(.*?)\$\$/) 

def map = [:] 
list.each{ 
    it = it.replace("\$\$", "") 
    map.putAt(it, it) 
} 

queryText = queryText.replaceAll(/\$\$(.*?)\$\$/) { k -> map[k[1]] ?: k[0] } 

System.out.println(map) 
System.out.println(queryText) 

输出:

output

所需输出:

"HELLO WORLD this is my test" 

我想,我需要这样的东西map.putAt(it, eval(it))

编辑

这是我得到我输入的方式。代码进入'test'脚本

右边的那些是脚本中的变量名,左栏是值(稍后将是动态的)

enter image description here enter image description here

+0

GiLA3,你有机会检查解决方案吗? – Rao

+0

RTFTemplates和Message1中的数据是什么? 'test'中是你现在的groovy脚本吗? – Rao

+0

RTF模板中的数据是不相关的,'query'属性是一个带'$$占位符$$'的字符串,message1只是一个空框,我将返回脚本处理的结果'queryText'。是的脚本在'test' – GiLA3

回答

3

你几乎没有。
解决方案是将值放入单独的变量中,而不是将它们放入脚本绑定中。

在开始加入这个(除去变量testtest2):

def test="HELLO" 
def test2="WORLD" 
binding.setProperty('test', test)  
binding.setProperty('test2', test2) 

并改变这一点:

{ k -> map[k[1]] ?: k[0] } 

这样:

{ k -> evaluate(k[1]) } 
+0

变量已经在这段代码之前设置好了,'def'部分是做一个例子,我的变量被检索如下:'#input String queryText,test,test2 '因为我在使用WebRatio。 'test'已经包含''HELLO''和'test2'已经包含''WORLD'',查询文本也一样,所以有没有办法让'bindingProperty'适合我的情况呢?像'binding.setProperty('test',test)''可能吗? – GiLA3

+0

ofcourse你可以,更新解决方案 – dsharew

+0

'{k - > evaluate(k [1])}'是我所需要的!在我的情况下,不需要“绑定”,即使我不明白为什么。非常感谢! – GiLA3

1

它应该如果你可以使用TemplateEngine,那就很简单。

def text = '$test $test2 this is my test' 
def binding = [test:'HELLO', test2:'WORLD'] 
def engine = new groovy.text.SimpleTemplateEngine() 
def template = engine.createTemplate(text).make(binding) 
def result = 'HELLO WORLD this is my test' 
assert result == template.toString() 

您可以测试在线快速Demo

+0

在我的要求中,我必须使用我的变量名称而不是'HELLO''和''WORLD'',因为这些值在每次执行代码时都会改变。我需要'def binding = [test:valueof(test),test2:valueof(test2)]' – GiLA3

+0

你需要什么确切的输入?一些地方应该有变量的映射/绑定及其值,对吗? – Rao

+0

用你请求的信息编辑我的问题:) – GiLA3

1

最后的工作代码,感谢所有人,尤其是帮助我的dsharew很多!

#input String queryText,test,test2,test3 

def list = queryText.findAll(/\$\$(.*?)\$\$/) 

def map = [:] 
list.each{ 
    it = it.replace("\$\$", "") 
    map.putAt(it, it) 
} 

queryText = queryText.replaceAll(/\$\$(.*?)\$\$/) { k -> evaluate(k[1]) } 

return queryText 
相关问题