用groovy格式化字符串

Rud*_*koŭ 5 string groovy string-formatting

我想%s用价值代替

<server>
    <id>artifactory</id>
    <username>%s</username>
    <password>%s</password>
</server>
Run Code Online (Sandbox Code Playgroud)

myString.format("name", "pass")常规中有什么方法吗?

ern*_*t_k 7

Groovy具有对字符串插值的内置支持。您需要使用GString

def name = "name"
def pass = "pass"

String formatted = """
<server>
    <id>artifactory</id>
    <username>$name</username>
    <password>$pass</password>
</server>
"""
Run Code Online (Sandbox Code Playgroud)

如果您的值以数组或集合的形式出现,您甚至可以使用params[n]而不是命名变量($name),如下所示:

def params = ['name', 'pass']

String formatted = """
<server>
    <id>artifactory</id>
    <username>${params[0]}</username>
    <password>${params[1]}</password>
</server>
"""
Run Code Online (Sandbox Code Playgroud)

如果您的字符串需要外部化,则可以使用模板引擎

除此之外,您可以使用普通的Java String.format

def formatted = String.format(myString, "name", "pass")
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。不是因为其他不行,而是groovy不是java,如果你要在groovy中输入Java...那么groovy是做什么用的?(高架?) (2认同)
  • @DmitriiSemikin我认为你的评论是关于一个没有被问到的问题。如果问题是关于模板的,那么我会建议[groovy的模板引擎](https://docs.groovy-lang.org/docs/next/html/documentation/template-engines.html),并且**仍然不是** `String.format()`。被接受的答案始终是OP的选择,这就是为什么从许多好的答案中得到一个(或没有)被接受的答案是相当常见的。这从来都不是问题。 (2认同)

dag*_*ett 5

基于Java的groovy,在Java formatString类中有一个方法

https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#format(java.lang.String,%20java.lang.Object ...)

所以这应该工作

def s='''<server>
    <id>artifactory</id>
    <username>%s</username>
    <password>%s</password>
</server>'''
println String.format(s, "name", "pass")
Run Code Online (Sandbox Code Playgroud)


Mik*_*e W 5

您可以使用DefaultGroovyMethods 中的sprintf

def name = "name"
def pass = "pass"

String formatted = """
<server>
    <id>artifactory</id>
    <username>$name</username>
    <password>$pass</password>
</server>
"""
def f = sprintf( formatted, name, pass )
Run Code Online (Sandbox Code Playgroud)

  • 插值在这里完成工作,而不是 sprintf。`def f = formatted` 将提供完全相同的结果。实际上,如果你执行 `def f = sprintf( formatted, "hello", "dude" )` 你不会有任何不同的结果 (2认同)