【问题标题】:Is there an operator that can trim indentation in multi-line string?是否有可以修剪多行字符串中的缩进的运算符?
【发布时间】:2014-04-12 09:49:16
【问题描述】:

这在 Groovy 中真的很棒:

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

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

First line,
second line,
last line

而不是

First line,
           second line,
           last line

在 Groovy 中可以吗?

【问题讨论】:

    标签: groovy multilinestring


    【解决方案1】:

    您可以为此使用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
               ''') 
    }
    

    【讨论】:

    • 真的很好!这仅适用于 GStrings 吗?是否有可能以某种方式“重载”运算符以使此方法调用透明?
    • 它也适用于字符串。关于 ovarloading 运算符,应该可以使用扩展方法或类别。更新答案。
    • 太棒了!是否可以将 StringCategory 设置为默认值或随处可用?
    • 为此,您需要使用扩展机制。在此处查看详细信息:mrhaki.blogspot.in/2013/01/…
    猜你喜欢
    • 2017-05-06
    • 1970-01-01
    • 2017-10-16
    • 2021-06-18
    • 2016-04-07
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    相关资源
    最近更新 更多