/
Программирование
/
Курс Java
/

Агрегация данных (Строки)

Java: Агрегация данных (Строки)

Агрегация применяется не только к числам, но и к строкам. Под агрегацией строк понимают задачи, в которых заранее неизвестно, что содержат строки и какого они размера.

При агрегации строка формируется динамически. Представьте себе метод, который повторяет строку указанное количество раз. В Java для этого есть готовые средства, но здесь мы посмотрим, как такой повтор устроен внутри:

App.repeat("hexlet", 3); // "hexlethexlethexlet"

Принцип работы этого метода довольно простой. В цикле происходит наращивание строки указанное количество раз:

public static String repeat(String text, int times) {
    // Нейтральный элемент для строк — пустая строка
    var result = "";
    var i = 1;

    while (i <= times) {
        // Каждый раз добавляем строку к результату
        result = result + text;
        i = i + 1;
    }

    return result;
}

Распишем выполнение этого кода по шагам:

// Для вызова repeat("hexlet", 3);
var result = "";
result = result + "hexlet"; // "hexlet"
result = result + "hexlet"; // "hexlethexlet"
result = result + "hexlet"; // "hexlethexlethexlet"

Наглядно процесс наращивания строки выглядит так:

repeat("hexlet", 3):

i=1: result = ""             + "hexlet" = "hexlet"
i=2: result = "hexlet"       + "hexlet" = "hexlethexlet"
i=3: result = "hexlethexlet" + "hexlet" = "hexlethexlethexlet"
                                            └── результат

Здесь работают сразу две переменные. Счетчик i управляет количеством повторов и останавливает цикл, когда повторов набралось times. Переменная result хранит накопленную строку и отдает ее вызывающему коду после цикла.

Нейтральный элемент

Чтобы наращивание заработало, нужно стартовое значение. Для строк им служит пустая строка "".

Ее называют нейтральным элементом, потому что при конкатенации она ничего не меняет:

System.out.println("" + "abc"); // => abc
System.out.println("abc" + ""); // => abc

Поэтому пустая строка всегда стоит в начале при агрегации строк. С нее цикл начинает наращивание, а дальше на каждой итерации добавляет к результату очередной кусок.

Задание

Реализуйте метод joinNumbersFromRange(), который объединяет все числа из диапазона в строку:

App.joinNumbersFromRange(1, 1); // "1"
App.joinNumbersFromRange(2, 3); // "23"
App.joinNumbersFromRange(5, 10); // "5678910"

Полезное

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются