#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)