🎯 Kotlin

Строки и работа с текстом в 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() берёт всё от этого индекса до конца строки. Если статья короткая — выводим её целиком.