Есть ли оператор, который может обрезать отступ в многострочной строке?

Это действительно хорошо в Groovy:

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

Многострочные строки. Я видел в некоторых языках инструменты, которые делают еще один шаг и могут удалить отступ строки 2 и т. Д., Чтобы оператор вывел:

First line,
second line,
last line

и не

First line,
           second line,
           last line

Это возможно в Groovy?

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
           ''') 
}
Другие вопросы по тегам