10

这在 Groovy 中非常好:

println '''First line,
           second line,
           last line'''

多行字符串。我在一些语言中看到了更进一步的工具,可以删除第 2 行的缩进等,因此该语句将打印:

First line,
second line,
last line

并不是

First line,
           second line,
           last line

在 Groovy 中可以吗?

4

1 回答 1

14

您可以stripMargin()为此使用:

println """hello world!
        |from groovy 
        |multiline string
    """.stripMargin()

如果您不想要前导字符(如本例中的管道),也有stripIndent(),但字符串的格式需要稍有不同(因为最小缩进很重要)

println """
        hello world!
        from groovy 
        multiline string
    """.stripIndent()

来自文档stripIndent

从字符串中的每一行去除前导空格。前导空格数最少的行确定要删除的数字。计算要去除的前导空格数时,将忽略仅包含空格的行。


更新

关于使用操作员来做这件事,我个人不建议这样做。但是对于记录,它可以通过使用扩展机制或使用类别(更简单和更笨重)来完成。类别示例如下:

class StringCategory {
    static String previous(String string) { // overloads `--`
        return string.stripIndent()
     }
}

use (StringCategory) {
    println(--'''
               hello world!
               from groovy 
               multiline string
           ''') 
}
于 2014-03-09T10:03:44.647 回答