Строки и строковые шаблоны

Учимся собирать текст красиво — без бесконечных плюсов.

Строковый шаблон — способ подставить значение переменной или выражения прямо в текст строки через символ $.

Работа с текстом — повседневная задача. Kotlin делает её удобной благодаря строковым шаблонам, которые избавляют от громоздкой конкатенации со множеством плюсов.

Шаблоны вместо склейки

Внутри строки символ $ подставляет значение переменной. Для целого выражения используют ${...}.

fun main() {
    val name = "Аня"
    val age = 25
    println("$name, возраст $age")
    println("Через год будет ${age + 1}")
}

Вывод:

Аня, возраст 25
Через год будет 26

Многострочные строки

Текст в тройных кавычках сохраняет переносы строк как есть — удобно для шаблонов, SQL-запросов или текста на несколько абзацев.

fun main() {
    val text = """
        Строка один
        Строка два
    """.trimIndent()
    println(text)
}

Вывод:

Строка один
Строка два

Полезные методы строк

У строк много готовых методов. Несколько частых:

МетодЧто делает
lengthдлина строки
uppercase()в верхний регистр
trim()убирает пробелы по краям
contains("x")есть ли подстрока
fun main() {
    val s = "  Kotlin  "
    println(s.trim().uppercase())
    println(s.trim().length)
}

Вывод:

KOTLIN
6

Как работает под капотом

Строки в Kotlin неизменяемы: любой метод вроде uppercase() или trim() не меняет исходную строку, а создаёт новую. Поэтому результат всегда нужно сохранять или использовать сразу. А чтобы поставить настоящий знак доллара, экранируйте его: \$.

Частые ошибки

  • Лепить плюсы вместо шаблонов. "$name: $age" читается лучше, чем name + ": " + age.
  • Забывать фигурные скобки для выражения. Для age + 1 нужно ${age + 1}, иначе подставится только age.
  • Ожидать, что метод изменит строку. Строки неизменяемы — методы возвращают новую строку.

Итог

  • Подставляйте значения через $переменная и ${выражение}.
  • Тройные кавычки дают многострочные строки.
  • Строки неизменяемы — методы создают новую строку.
Проверьте себя
1. Как подставить в строку результат выражения age + 1?
A$age + 1
B${age + 1}
C{age + 1}
D$(age + 1)
2. Что вернёт "Hi".uppercase() и изменится ли исходная строка?
AВернёт "HI", исходная строка тоже станет "HI"
BВернёт "HI", исходная строка не изменится
CИзменит строку на месте, ничего не вернёт
DВызовет ошибку — строки нельзя менять регистр