你最好如何"截断" Groovy / Java中的以下变量?
def p = '{"name" : "%token%", "lastName" : "%c%e", "addrMngr" : "%xyz", "postCode" : "%x"}'
换句话说,我怎么能一般地来自:
def p = '{"name" : "%token%", "lastName" : "%c%e", "addrMngr" : "%xyz", "postCode" : "%x"}'
到
def p = '{"name" : "", "lastName" : "", "addrMngr" : "", "postCode" : ""}'
忽略"值"中%
的使用上面的列表,以及将来,随着更多数据,这个字符串可能会变大。
答案 0 :(得分:1)
我认为OP的字符串实际上是json
。
您可以使用JsonSlurper
将其转换回字符串。
def p = '{"name" : "%token%", "lastName" : "%c%e", "addrMngr" : "%xyz", "postCode" : "%x"}'
def json = new groovy.json.JsonSlurper().parseText(p)
json.keySet().collect{json."$it" = ''}
def result = groovy.json.JsonOutput.toJson(json)
println "Resultant after transformation: $result"
assert result instanceof String
答案 1 :(得分:0)
我会用正则表达式尝试:
p.replaceAll("\" : \".*\", \"", "\" : \"\", \"");
这是一个开始。 也可以使用正则表达式,例如,使空格可选。
答案 2 :(得分:0)
原始p
非常接近Groovy中的地图语法;稍微改变一下,我们可以将它评估成一个真实的地图(LinkedHashMap,不能少,重新:关键顺序)。
假设性能不重要,请考虑以下(无正则表达式):
def p = '{"name" : "%token%", "lastName" : "%c%e", "addrMngr" : "%xyz", "postCode" : "%x"}'
def m = p.replace('{','[').replace('}',']')
def map = evaluate(m)
def buffer = new StringBuilder()
buffer.append("{")
map.eachWithIndex { key, val, index ->
buffer.append(/"${key}" : ""/)
if (index < map.keySet().size() - 1) {
buffer.append(', ')
}
}
buffer.append("}")
def p2 = '{"name" : "", "lastName" : "", "addrMngr" : "", "postCode" : ""}'
assert p2 == buffer.toString()