【问题标题】:Is there a way to declare a Groovy string format in a variable?有没有办法在变量中声明 Groovy 字符串格式?
【发布时间】:2014-11-19 12:34:05
【问题描述】:

我目前有一个资产管理代码的固定格式,它使用带有美元符号的 Groovy 字符串格式:

def code = "ITN${departmentNumber}${randomString}"

这将生成如下代码:

ITN120AHKXNMUHKL

但是,我有一个新要求,即代码格式必须是可定制的。我想通过允许用户设置自定义格式字符串来公开此功能,例如:

OCP${departmentNumber}XI${randomString}

PAN-${randomString}

将输出:

OCP125XIBQHNKLAPICH

PAN-XJKLBPPJKLXHNJ

然后 Groovy 将解释并替换为适当的变量值。这可能吗,还是我必须手动解析占位符并手动执行 string.replace?

【问题讨论】:

  • 可能是我不清楚这个问题,但你所要求的可以在 Groovy 中完成。您可以尝试使用示例脚本吗?我想你会在样本上得到答案。
  • 认为他希望“用户”输入一个 GString,然后对其进行评估。
  • 为什么不使用String.format(),或者MessageFormat.format(),让用户选择模式?

标签: groovy


【解决方案1】:

我相信GString lazy evaluation 符合要求:

deptNum = "C001"
randomStr = "wot"

def code = "ITN${deptNum}${->randomStr}"

assert code == "ITNC001wot"

randomStr = "qwop"

assert code == "ITNC001qwop"

【讨论】:

    【解决方案2】:

    Triple double quoted string

    def password = "30+"
    
    def authRequestBody = """
    <dto:authTokenRequestDto xmlns:dto="dto.client.auth.soft.com">
       <login>support@soft.com</login>
       <password>${password}</password>
    </dto:authTokenRequestDto>
    """
    

    【讨论】:

      【解决方案3】:

      我认为原始发布者希望使用变量作为格式字符串。答案是字符串插值仅在格式为字符串文字时才有效。似乎必须在编译时将其转换为更底层的String.format 代码。我最终使用了sprintf

      baseUrl 是一个包含从属性文件加载的http://example.com/foo/%s/%s 的字符串

      def operation = "tickle"
      def target = "dog"
      def url = sprintf(baseUrl, operation, target)
      
      url
      ===> http://example.com/foo/tickle/dog
      

      【讨论】:

        【解决方案4】:

        我相信在这种情况下你不需要使用 GString 的惰性求值,java 的普通 String.format() 可以解决问题:

        def format = 'ITN%sX%s'
        def code = { def departmentNumber, def randomString -> String.format(format, departmentNumber, randomString) }
        assert code('120AHK', 'NMUHKL') == 'ITN120AHKXNMUHKL'
        format = 'OCP%sXI%s'
        assert code('120AHK', 'NMUHKL') == 'OCP120AHKXINMUHKL'
        

        希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 2017-01-30
          • 1970-01-01
          • 1970-01-01
          • 2013-06-27
          • 1970-01-01
          • 1970-01-01
          • 2021-04-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多