JavaRush /Курсы /Kotlin SELF /Строки и текст: тип String, работа со строками

Строки и текст: тип String, работа со строками

Kotlin SELF
2 уровень , 2 лекция
Открыта

1. Изучаем подробнее тип String

Тип String — один из самых используемых типов в Kotlin. Возможно, вообще самый используемый. Это просто великолепный тип, ведь в таких переменных можно хранить текст. А еще, в отличие от типов Int и Double, у объектов типа String есть куча различных функций, и с помощью этих функций можно делать различные интересные вещи.

Кроме того, все объекты в Kotlin (вообще все) могут быть преобразованы в тип String. Ну или, если сказать более корректно, все объекты в Kotlin возвращают свое текстовое (строковое) представление. Мы будем еще не раз возвращаться к этому типу (очень уж он полезный и интересный), но сегодня познакомимся с его основами.

Создание переменных типа String

Тип String создан для хранения строк (текста). Чтобы создать в коде переменную, которая будет способна хранить текст, нужно воспользоваться командой:

var имя: String
Создание переменной типа String

Где имя — это имя переменной.

Примеры:

Команда Описание
var name: String
Создается строковая переменная name
var message: String
Создается строковая переменная message
var text: String
Создается строковая переменная text

Так же, как с типами Int и Double, можно создавать несколько переменных типа String.

В Kotlin запись через запятую, как в Java (String a, b;), не используется — переменные объявляют отдельно:

fun main() {
    var имя1: String
    var имя2: String
    var имя3: String
}

2. Присваивание значений переменным типа String

Чтобы занести в переменную типа String значение, нужно воспользоваться командой:

имя = "значение"
Присваивание значения переменной типа String

А вот и первое отличие типа от уже изученных. Все значения типа String представляют собой строки текста и должны быть заключены в двойные кавычки.

Примеры:

Команда Примечание
var name: String = "Аня"
Переменная name содержит текст Аня
var city: String = "New York"
Переменная city содержит текст New York
var message: String = "Hello!"
Переменная message содержит текст Hello!

3. Инициализация переменных типа String

Как и в случае с типами Int и Double, переменные типа String можно инициализировать сразу при создании. Это, кстати, можно делать вообще со всеми типами в Kotlin. Так что больше мы об этом говорить не будем.

fun main() {
    var имя1: String = "значение1"
    var имя2: String = "значение2"
    var имя3: String = "значение3"
}
Общий вид создания и инициализации переменных
fun main() {
    var name: String = "Аня"
    var city: String = "New York"
    var message: String = "Hello!"
}
Пример команды создания и инициализации переменных

Менять можно только переменные со значением

Kotlin-компилятор будет ругаться, если вы объявите переменную, не присвоив ей никакого значения, и попробуете ее использовать.

Такой код работать не будет:

fun main() {
    var name: String
    println(name) // Переменная name не инициализирована. Программа не скомпилируется.
}
fun main() {
    var a: Int
    a++ // Переменная a не инициализирована. Программа не скомпилируется.
}
fun main() {
    var x: Double
    val y = x // Переменная x не инициализирована. Программа не скомпилируется.
}

4. Конкатенация — склеивание строк

Есть очень интересная и простая вещь, которую можно делать со строками в Kotlin — их можно склеивать. Такая операция называется конкатенация. Ну или чтобы легче запомнилось — Кон-Котэ-Нация 😆. Хотя часто ее называют «склеивание строк» или даже просто «сложение строк».

Чтобы склеить две строки, нужно использовать знак +. Это очень просто:

val result = "строка1" + "строка2"
Конкатенация двух строк

Примеры:

Команда Примечание
val name = "Аня" + "Аня"
name содержит строку АняАня
val city = "New York" + "Аня"
city содержит строку New YorkАня
val message = "Hello! " + "Аня"
message содержит строку Hello! Аня

Ну и, конечно, одновременно можно складывать много строк, а также складывать строки и переменные.

Примеры:

fun main() {
    val name = "Аня"                  // name содержит строку Аня
    val city = "New York"             // city содержит строку New York
    val message = "Hello!" + city + name + city // message содержит строку Hello!New YorkАняNew York
}

5. Пустые строки

В последнем примере видно, что текст в переменной message плохо читается, т.к. в нем не хватает пробелов. Чтобы задать один пробел или несколько, нужно просто написать их в коде и обернуть в двойные кавычки. Это проще, чем кажется:

" "
Строка, содержащая один пробел

Кстати, если между кавычками совсем не оставить места (написать две двойные кавычки подряд), получится так называемая «пустая строка»:

""
Пустая строка

С одной стороны, она вроде бы и есть, а с другой, при ее выводе на экран ничего не выводится. И при склейке с другими строками ничего не происходит. Эдакий аналог нуля, только для строк.

6. Экранирование спецсимволов в строках

Вы уже знаете, что строки обрамляются двойными кавычками. Но что делать, если нужно вставить в строку кавычки? Если мы напишем кавычки в строке, разве компилятор не посчитает их как окончание строки?

Правильно. Посчитает. Поэтому кавычки внутри текста заменяются парой символов \". И код будет выглядеть вот так:

fun main() {
    val quote = "Он сказал: \"Здравствуйте!\""
    println(quote) // Он сказал: "Здравствуйте!"
}

На самом деле все еще немного хитрее. Символ \ считается специальным (управляющим) символом внутри строк. С его помощью можно задавать различные "непечатные символы" типа переноса строки, табуляции и т.п. Ну а чтобы задавать сам символ \, его нужно написать 2 раза.

Вот 4 самые распространённые комбинации:

Запись Значение
\n
Перенос строки (newline)
\t
Табуляция (отступ)
\\
Буквально \
\"
Кавычки внутри строки

Пример:

fun main() {
    val multiline = "Строка 1\nСтрока 2"
    println(multiline)
}

Выведет:

// Строка 1
// Строка 2

7. Собственные функции строк

У типа String есть собственные функции (их еще называют методами). Их очень много, и они облегчают жизнь программистам. Сегодня вы познакомитесь с некоторыми (самыми простыми) из них. Пример:

Функция Описание Пример результата
str.length
Длина строки
"abc".length → 3
str.uppercase()
В верхний регистр
"abc".uppercase() → "ABC"
str.lowercase()
В нижний регистр
"ABC".lowercase() → "abc"
str.trim()
Удалить пробелы по краям
"  x y  ".trim() → "x y"

Примеры работы с функциями строк

Все эти функции вызываются вот так: переменная.функция(...).

Определить длину строки:

fun main() {
    val name = "Андрей"
    val length = name.length
    println(length) // 6, так как 6 букв
}

Перевести строку в верхний или нижний регистр:

fun main() {
    val original = "Привет"
    println(original.uppercase()) // ПРИВЕТ
    println(original.lowercase()) // привет
}

Удалить пробелы по краям (очень полезно при вводе с клавиатуры):

fun main() {
    val messy = "   hello   "
    println(messy.trim()) // "hello"
}

Каждая такая функция возвращает новую строку, старая строка при этом не меняется.

8. String templates

$name: подставляем значения в строку

Когда конкатенаций становится много, строка начинает выглядеть как лапша из кавычек, плюсов и пробелов. Kotlin предлагает очень практичный синтаксис — string templates (строковые шаблоны): внутри строки можно написать $name, и Kotlin подставит значение переменной. Это часть базового синтаксиса языка.

Вам достаточно просто написать имя переменной со знаком доллар и Kotlin сам подставит ее значнеие прямо в текст:

fun main() {
    val cafe = "Byte & Coffee"
    val item = "Latte"
    val price = 180

    println("=== $cafe ===")    // === Byte & Coffee ===
    println("Позиция: $item")   // Позиция: Latte
    println("Цена: $price ₣ ")   // Цена: 180
}

Согласитесь, глазам стало легче. И вам, и тем, кто будет читать ваш код.

${expr}: вставляем выражения

$name работает, когда нужно подставить простое имя (переменную). Но часто хочется подставить результат вычисления: сумму, произведение, выражение со скобками. Для этого используется форма ${...}.

Просто добавьте фигурные скобки и в них можно писать любые выражения:

fun main() {
    val item = "Latte"
    val price = 180
    val count = 2

    println("Позиция: $item")
    println("Цена за 1: $price ₣ ")
    println("Количество: $count")
    println("Итого: ${price * count} ₣ ") // Итого: 360 ₣
}

Здесь внутри ${...} обычное выражение price * count, которое вы уже умеете читать благодаря прошлой лекции про Int.

Конкатенация vs templates

Когда выбирать +, а когда templates? В большинстве случаев templates удобнее. Kotlin даже в рекомендациях по стилю отдельно подчёркивает идею: фигурные скобки в шаблонах стоит использовать для выражений, а простую переменную вставлять как $name.

Задача Конкатенация + String templates
Вставить переменную
"Привет, " + name
"Привет, $name"
Вставить выражение
"Итого: " + (a + b)
"Итого: ${a + b}"
Не забыть пробелы Нужно руками следить за " " Обычно меньше “склеек”, легче заметить
Читаемость Падает при длинных строках Обычно выше

Конкатенация не запрещена и иногда уместна, особенно если вы собираете строку из многих кусочков поэтапно. Но для обычных сообщений пользователю templates почти всегда проще.

1
Задача
Kotlin SELF, 2 уровень, 2 лекция
Недоступна
Приветствие в чате
Приветствие в чате
1
Задача
Kotlin SELF, 2 уровень, 2 лекция
Недоступна
Никнейм под лупой
Никнейм под лупой
1
Задача
Kotlin SELF, 2 уровень, 2 лекция
Недоступна
Ловушка склейки
Ловушка склейки
1
Задача
Kotlin SELF, 2 уровень, 2 лекция
Недоступна
Чек для кофейни
Чек для кофейни
Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Ear Servant Уровень 3
2 апреля 2026
Столько тз уже встретил противоречащих логике и запутанных по смыслу, например взять задачку с кафе, задача сама по себе стартовая вообще никаких сложностей нет, но из-за запутанного тз пришлось задержаться То есть, в тз написано вывести "Длину названия кофейни", в шаблоне там просто текст переменной, которую нужно подставить. Мозг думает, ну наверное логичнее будет сюда подставить доллар, а нет, надо как в тз Либо это тонкий подкол на то что всё тз в будущем будет составлено нейронками в компаниях и у работников не должно быть вопросов, ну либо подкол того что продуктовые менеджеры умственно отсталые люди
Иван Уровень 11
1 апреля 2026
Вам достаточно просто написать имя переменной со знаком доллар и Kotlin сам подставит ее значнеие прямо в текст: значЕНие