Бесплатный курс по java. Зарегистрируйтесь для отслеживания прогресса →

Java: Цепочки вызовов методов

Обработка данных может состоять из достаточно большого количества шагов, которые нужно выполнить. Возьмем для примера такую задачу: На основе введенного пользователем названия статьи сформировать адрес страницы в интернете. Такая задача часто возникает при публикации статей в блогах. Подобные адреса выглядят так: https://ru.hexlet.io/blog/posts/iz-vahtovika-v-programmirovanie. Последняя часть здесь iz-vahtovika-v-programmirovanie создана автоматически кодом, который мы написали на Хекслете. Кстати у нее есть специальное название – это слаг.

Какие шаги нужно выполнить чтобы получить подобную строку? Вот лишь некоторые из них:

  • Перевести все в нижний регистр, чтобы случайно не создавались дубли одинаковых страниц в поисковых системах
  • Очистить название от пробельных символов на концах. Там они могут случайно появиться при вводе названия
  • Выполнить транслитерацию. Лучше когда в адресах только символы латинского алфавита
  • Вырезать все специальные символы, такие как вопросы, восклицательные знаки и т.п.
  • Заменить все пробелы на дефисы

Часть шагов тут требует новых для нас знаний, поэтому мы их опустим. Остальные шаги будут выглядеть примерно так:

// Название введенное пользователем. Для простоты на английском
var name = " How match is the fish?   ";
name = name.trim(); // вырезаем концевые пробелы
name = name.replace("?", ""); // Удаляем вопрос
name = name.replace(" ", "-"); // Заменяем пробелы на дефис
name = name.toLowerCase(); // в нижний регистр
System.out.println(name); // => "how-match-is-the-fish"

Если внимательно посмотреть на этот код, то можно заметить общий шаблон. Метод возвращает данные, которые мы присваиваем переменные и дальше, по цепочке, обрабатываем. Этот шаблон можно упростить, убрав промежуточное перезаписывание переменной:

var name = " How match is the fish?   ";
name = name.trim().replace("?", "").replace(" ", "-").toLowerCase();
System.out.println(name); // => "how-match-is-the-fish"

Благодаря тому, что каждый метод возвращает новую строку, мы можем продолжать обрабатывать ее вызывая методы подряд. Если цепочка методов становится слишком длинной, то ее можно разбить на несколько строк:

name = name.trim()
    .replace("?", "")
    .replace(" ", "-")
    .toLowerCase();

Несмотря на удобство этого механизма, им не стоит злоупотреблять. Промежуточные переменные могут упростить понимание кода.

Задание

Напишите код, который берет данные из переменной name и выполняет капитализацию, в программировании так называют операцию, которая делает заглавной первую букву в слове, а все остальные переводит в нижний регистр. Например: heXlet => Hexlet.

Для извлечения частей слова, воспользуйтесь методом substring():

// 1 параметр – индекс, 2 – длина извлекаемой подстроки
"hexlet".substring(0, 1); // "H"
// По умолчанию до конца строки
"hexlet".substring(1); // "exlet"

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются https://github.com/hexlet-basics
Если вы столкнулись с трудностями и не знаете, что делать, задайте вопрос в нашем большом и дружном сообществе