Хобрук: Ваш путь к мастерству в программировании

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

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

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

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

First line,
second line,
last line

и не

First line,
           second line,
           last line

Возможно ли это в Groovy?

09.03.2014

Ответы:


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
           ''') 
}
09.03.2014
  • действительно мило! Это работает только на GStrings? Можно ли как-то перегрузить оператор, чтобы сделать вызов этого метода прозрачным? 09.03.2014
  • Он работает и со строками. Что касается загрузки оператора, это должно быть возможно с помощью методов расширения или категорий. Обновление ответа. 09.03.2014
  • превосходно! и можно ли установить StringCategory по умолчанию или доступным везде? 09.03.2014
  • Для этого вам нужно использовать механизм расширения. Подробнее см. здесь: mrhaki.blogspot.in/2013/ 01/ 09.03.2014
  • Новые материалы

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..

    Обзор 20 основных и современных методов работы с массивами в JavaScript
    Вы знаете их всех? В этом коротком посте я покажу сводку методов, доступных в JavaScript для работы с массивами. Я надеюсь, что вы найдете это полезным! В конце поста вы найдете ссылку на..

    Да, но я чувствую необходимость указать, что это или не единственные два.
    Да, но я чувствую необходимость указать, что это или не единственные два. Обучение с подкреплением (в качестве примера) также является важным.

    Получение стоковых обновлений с помощью Python
    Для начинающего финансового аналитика Введение Описание: Этот проект Python создает скрипт для получения текущих обновлений акций с финансового веб-сайта Yahoo. Для этого проекта мы..