【问题标题】:Replace strings in an existing string in Groovy在 Groovy 中替换现有字符串中的字符串
【发布时间】:2017-10-11 01:50:02
【问题描述】:

在 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" : ""}'

忽略上面“值”列表中%的使用,以后这个String可能会随着更多数据而变大。

【问题讨论】:

    标签: java regex groovy


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      原来的p 非常接近Groovy 中的map 语法;稍加改动,我们就可以将其评估为真实的地图(LinkedHashMap,不少于,re: key order)。

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

      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()
      

      【讨论】:

        【解决方案3】:

        我会尝试使用正则表达式:

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

        这是一个开始。 微调正则表达式也是可能的,例如使空格可选。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-08-01
          • 1970-01-01
          • 2013-01-04
          • 2012-04-03
          • 1970-01-01
          • 1970-01-01
          • 2013-07-23
          • 2013-11-05
          相关资源
          最近更新 更多