Лучший способ написания многострочного текста

#kotlin

#kotlin

Вопрос:

Я создал многострочный текст, который определяется следующим образом:

 fun main() {
   val t = "SELECT g.description, a.gender_abbr, count(a.gender_abbr)"  
           " from accounts a inner join genders g on g.abbr = a.gender_abbr"  
           " group by a.gender_abbr, g.description"
   print(t)
}
  

Есть ли лучший способ написать многострочную строку?

Я также пытался:

 fun main() {
   val t =  """
           SELECT g.description, a.gender_abbr, count(a.gender_abbr)
           from accounts a
           inner join genders g on g.abbr = a.gender_abbr
           group by a.gender_abbr, g.description
         """.trimIndent()
   print(t)
}
  

Но это не дает того же результата.

Комментарии:

1. Что вы подразумеваете под ‘лучше’, и почему различия в последнем (встроенные новые строки, я полагаю) здесь значительны?

Ответ №1:

Вы можете использовать тройные кавычки """ , но строка будет обрабатываться как строковый литерал, поэтому n в результате будут показаны новая строка и пробелы.

Как это решить? Добавьте оператор replace!

  • .replace("n\s ".toRegex(), "") удаляет новую строку и все пробелы после этого

введите описание изображения здесь

Примечание: все пробелы после новой строки удаляются, поэтому добавьте один в строке перед. Спорно, требует ли это меньше усилий, чем добавление операторов, но для больших укусов это может иметь место.

Ответ №2:

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

 fun String.trimNewline() = trimIndent().replace("n", " ")
  

Затем используйте его следующим образом:

 val t =  """
    SELECT g.description, a.gender_abbr, count(a.gender_abbr)
    from accounts a
    inner join genders g on g.abbr = a.gender_abbr
    group by a.gender_abbr, g.description
    """.trimNewline()
print(t)