2017-04-20 42 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 
相關問題