我让我们说一个字符串中的100个变量,我的要求是从字符串中自动创建Map
:
String str = "$$test$$ $$test2$$ $$test$$ $$test3$$"
预期结果:
["test":test, "test2":test2, "test3":test3];
编辑(对于dsharew) 这是我的代码的最后一个版本
def list = queryText.findAll(/\$\$(.*?)\$\$/)
def map = [:]
list.each{
log.debug(it)
it = it.replace("\$\$", "")
log.debug(it)
map.putAt(it, it)
}
log.debug(list)
log.debug(map)
queryText = queryText.replaceAll(/\$\$(.*?)\$\$/) { k -> map[k[1]] ?: k[0] }
log.debug(queryText)
日志打印出以下结果:
$$test$$
test
$$test2$$
test2
$$test$$
test
$$test3$$
test3
[$$test$$, $$test2$$, $$test$$, $$test3$$]
{test=test, test2=test2, test3=test3}
test test2 test test3
答案 0 :(得分:1)
这应该做你想要的:
import Tkinter as tk
from PIL import ImageTk
from io import BytesIO
from urllib import urlopen
root = tk.Tk()
canvas = tk.Canvas(root, width=300, height=300)
canvas.pack()
canvas.create_text(150, 150, text="word word word word word word word word")
url = "https://www.dropbox.com/s/etqan5h62d14mv8/Pikachu-PNG-Photos.png?dl=1"
img = ImageTk.PhotoImage(file=BytesIO(urlopen(url).read()))
canvas.create_image(150, 150, image=img)
root.mainloop()
答案 1 :(得分:1)
按照@dsharew的回答,我把它减少了一点:
def queryText = "\$\$test\$\$ \$\$test2\$\$ \$\$test\$\$ \$\$test3\$\$"
def resultMap = queryText
.findAll(/\$\$(.*?)\$\$/)
.collectEntries { String next ->
[next.replace("\$\$", "")] * 2
}
collectEntries
可用于从集合中返回地图,如果它为集合中的每个条目返回地图或元组。
如果您将列表乘以n
,则表示您创建了一个更大的列表,其内容为n
次
答案 2 :(得分:0)
这就是我想出来的
String str = '$$test$$ $$test2$$ $$test$$ $$test3$$'
str.replaceAll('\\$\\$', '').split(' ').collectEntries { [(it):it] }