Строки и работа с текстом в Kotlin 1.9: подробное руководство
Строки и работа с текстом в Kotlin
Введение: зачем нам работать с текстом?
Компьютеры отлично умеют считать числа, но в реальной жизни мы постоянно имеем дело с текстом: имена пользователей, посты в соцсетях, названия песен, хештеги. В программировании текст хранится в виде строк (тип String).
Представь, что строка — это коробка с буквами, которые идут по порядку. Мы можем заглядывать в эту коробку, брать отдельные буквы, соединять строки, считать в них слова и даже переворачивать их задом наперёд!
Основной синтаксис: как работать со строками
В Kotlin строки создаются просто — с помощью двойных кавычек:
val название = "SuperGadget X"
val хештег = "#ЛучшийДеньДляПрограммирования"
println(название) // Выведет: SuperGadget X
1. Длина строки
Узнать, сколько символов в строке, помогает свойство .length:
val текст = "Привет, мир!"
println("Длина строки: ${текст.length}") // Выведет: Длина строки: 12
2. Доступ к символу по индексу
Каждый символ в строке имеет свой номер (индекс). Важно: счёт начинается с 0!
val слово = "Kotlin"
println(слово[0]) // Выведет: K
println(слово[2]) // Выведет: t
3. Извлечение части строки (подстроки)
Функция substring() помогает взять кусочек строки. Нужно указать начальный индекс и конечный (конечный индекс не включается):
val хештег = "#ЛучшийДеньДляПрограммирования"
// Берём символы с 1-го по 7-й (не включая 7-й)
val часть = хештег.substring(1, 7)
println(часть) // Выведет: Лучший
4. Разделение строки на части
Функция .split() разрезает строку по разделителю и возвращает список слов:
val текстПесни = "Мы едем едем едем в далекие края"
val слова = текстПесни.split(" ")
println(слова) // Выведет: [Мы, едем, едем, едем, в, далекие, края]
println("Количество слов: ${слова.size}") // Выведет: Количество слов: 7
5. Переворот строки
Функция .reversed() переворачивает строку задом наперёд:
val фраза = "Привет"
println(фраза.reversed()) // Выведет: тевирП
6. Удаление пробелов в начале и конце
Функция .trim() убирает лишние пробелы:
val грязнаяСтрока = " Привет, мир! "
println("'${грязнаяСтрока.trim()}'") // Выведет: 'Привет, мир!'
Разбор типичных задач
Задача 1: "Хештег" — взять часть хештега
Условие: Дан хештег #ЛучшийДеньДляПрограммирования. Нужно вывести только первые 7 символов самого слова (без решётки).
Решение:
fun main() {
val хештег = readLine() ?: "#ЛучшийДеньДляПрограммирования"
// Убираем решётку и берём первые 7 символов
val безРешетки = хештег.substring(1)
val результат = безРешетки.substring(0, 7)
println(результат)
}
Задача 2: "Песня" — подсчёт количества слов
Условие: Дан текст песни. Нужно посчитать, сколько в нём слов (слова разделены пробелами).
Решение:
fun main() {
val текстПесни = readLine() ?: "Мы едем едем едем в далекие края"
val слова = текстПесни.split(" ")
println("Количество слов: ${слова.size}")
}
Задача 3: "Обратное сообщение" — переворот строки
Условие: Получить от пользователя фразу и вывести её задом наперёд.
Решение:
fun main() {
val сообщение = readLine() ?: "Привет"
println(сообщение.reversed())
}
Частые ошибки новичков
- Выход за границы строки: если попробовать взять символ с индексом, которого нет (например,
строка[100]при длине строки 10), программа упадёт с ошибкой. Всегда проверяйте.length. - Путаница с индексами: помните, что первый символ — это индекс 0, а не 1.
строка[0]— первый символ. - Забыли про .trim(): если пользователь вводит текст с пробелами в начале или конце,
.split(" ")может создать пустые слова. Всегда используйте.trim()перед обработкой. - Ошибка в substring: в
substring(начало, конец)конечный индекс не включается. Чтобы взять первые 5 символов, пишемsubstring(0, 5).
Итоговый пример: "Статья" — извлечение заключительной части
Условие: Представьте, что вы написали статью о гаджете "SuperGadget X". Редактор просит выслать только последние 50 символов статьи (заключение). Напишите программу, которая это сделает.
Решение:
fun main() {
// Вводим текст статьи
val статья = readLine() ?: "SuperGadget X — это новейшее устройство, которое меняет представление о технологиях. Он имеет потрясающий дизайн и невероятную производительность. В заключение хочется сказать, что это лучший гаджет года!"
// Определяем длину статьи
val длина = статья.length
// Если статья короче 50 символов — берём всю
val заключение = if (длина > 50) {
// Берём последние 50 символов: от (длина - 50) до конца
статья.substring(длина - 50)
} else {
статья
}
println("Заключение статьи:")
println(заключение)
}
Как это работает: мы вычисляем длина - 50 — это индекс, с которого начинаются последние 50 символов. Функция substring() берёт всё от этого индекса до конца строки. Если статья короткая — выводим её целиком.