首页 > 解决方案 > Groovy 等效于 Java 的 String.format

问题描述

下面的 Java 代码给出了 Groovy 中的错误。

  private String getSignature() {
    String timestamp = getUTCTimestamp();
    String nonce = getNonce();
    String digest = getPasswordDigest(nonce, timestamp);

    return String.format(
            "UsernameToken Username=\\"%s\\", PasswordDigest=\\"%s\\", Nonce=\\"%s\\", Created=\\"%s\\"", apiUsername, digest, nonce, timestamp);
}

特别是String.format这一行,如何在Groovy中重写?

标签: groovy

解决方案


您可以优先使用 GroovyStrings,而不是 String.format 或字符串连接;GroovyStrings 允许您将变量插入到字符串的主体中,如文档中所述

任何 Groovy 表达式都可以插入到所有字符串文字中,除了单引号和三重单引号字符串。插值是在评估字符串时用其值替换字符串中的占位符的行为。占位符表达式由 ${} 包围,或以 $ 为前缀以表示点分表达式。当 GString 通过在该表达式上调用 toString() 传递给以字符串为参数的方法时,占位符内的表达式值被评估为其字符串表示形式。

有多种分隔字符串文字的方法,您可以通过选择不同的分隔语法来避免转义双引号,例如Dollar-slashyslashyTriple-double-quoted

顺便说一句,在 Groovy 中,您不需要分号,并且仅当您从方法中提前返回时才需要显式使用 return:

String getSignature() {
    String timestamp = getUTCTimestamp()
    String nonce = getNonce()
    String digest = getPasswordDigest(nonce, timestamp)

    $/UsernameToken Username="${apiUsername}", PasswordDigest="${digest}", Nonce="${nonce}", Created="${timestamp}"/$
}

推荐阅读