是否有运算符可以修剪多行字符串中的缩进?

时间:2014-03-09 09:48:08

标签: groovy multilinestring

这在Groovy中非常好用:

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

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

First line,
second line,
last line

而不是

First line,
           second line,
           last line

在Groovy中可以吗?

1 个答案:

答案 0 :(得分:13)

您可以使用stripMargin()

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

如果你不想要前导字符(在这种情况下就像管道一样),那么也有stripIndent(),但是字符串需要格式化不同(最小缩进很重要)

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

来自stripIndent

的文档
  

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


<强>更新

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

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

use (StringCategory) {
    println(--'''
               hello world!
               from groovy 
               multiline string
           ''') 
}