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

    Groovy/Javaで以下の変数を "切り捨て"するのに最適でしょうか?言い換えればGroovyの既存の文字列に文字列を置き換えます

    def p = '{"name" : "%token%", "lastName" : "%c%e", "addrMngr" : "%xyz", "postCode" : "%x"}' 
    

    、どのように私は、一般的に得ることができます:上記の "値" リストで、将来的に%の使用法を無視

    def p = '{"name" : "", "lastName" : "", "addrMngr" : "", "postCode" : ""}' 
    

    def p = '{"name" : "%token%", "lastName" : "%c%e", "addrMngr" : "%xyz", "postCode" : "%x"}' 
    

    このStringは、より多くのデータで大きくなる可能性があります。

    答えて

    0

    私は正規表現でそれをしようとするだろう:

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

    スタートだこと。 正規表現の微調整も可能です。スペースをオプションにします。

    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() 
    
    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 
    
    関連する問題