java
  • regex
  • groovy
  • 2017-10-11 64 views 0 likes 
    0

    如何最好地在Groovy/Java中“截断”以下变量?替换Groovy中现有字符串中的字符串

    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

    我会用正则表达式尝试:

    p.replaceAll("\" : \".*\", \"", "\" : \"\", \""); 
    

    这是一个开始。改变正则表达式也是可能的,例如,使空间可选。

    0

    原始p与Groovy中的地图语法非常接近;稍作修改后,我们可以将其评估为真实地图(LinkedHashMap,不低于re:键顺序)。

    假设的表现并不重要,请考虑以下(无正则表达式):

    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() 
    
    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 
    
    相关问题