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

Java: Неизменяемость строк

Попробуйте ответить на вопрос, что выведет на экран следующий код?

var company = "hexlet";
company.toUpperCase(); // в верхний регистр
System.out.println(company); // => ?

Если ваш ответ, "HEXLET", то нам есть о чем поговорить) Эта программа выведет "hexlet" (проверьте на tryjshell). Почему?

Строки в Java неизменяемы. Не существет способа и методов, способных изменить саму строку. Любой метод строки может только вернуть новую строку. Основная причина, почему так сделано – производительность. Строки, как и примитивные типы данных нельзя менять практически ни в одном современном языке.

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

Но как же все таки поступать, если данные нужно поменять? Для этого достаточно заменить значение переменной:

var language = "JAVA"
language = language.toLowerCase();
System.out.println(language); // => "java"

С другой стороны, именно в такой ситуации можно создать новую переменную, с другим именем.

var language = "JAVA"
var processedLanguage = language.toLowerCase();
System.out.println(processedLanguage); // => "java"

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

Задание

Данные, вводимые пользователями в формах, часто содержат лишние пробельные символы в конце или начале строки. Кроме того, пользователи могут вводить одно и тоже в разном регистре, что потом мешает работе с данными. Поэтому перед тем как добавлять их, данные обрабатывают (говорят нормализуют). В базовую обработку входят два действия:

  • Удаление концевых пробельных символов с помощью метода .trim(), например, было: " hexlet\n ", стало: "hexlet"
  • Приведение к нижнему регистру с помощью метода toLowerCase(). Было: "[email protected]", стало:"[email protected]"`.

Обновите переменную email записав в неё то же самое значение, но обработанное по схеме указанной выше. Распечатайте то, что получилось, на экран.


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