Зарегистрируйтесь, чтобы продолжить обучение

Обработка строк через преобразование в массив Java: Массивы

На собеседованиях часто задают подобные задачки:

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

var text = "hello hexlet";
MyStringUtils.capitalizeWords(text); // "Hello Hexlet"

Решить ее можно многими способами. Чем больше называет человек — тем лучше. Разберем решение через массив. Для этого воспользуемся методом строки split(), который разделяет строку на массив используя указанный разделитель:

class MyStringUtils {
    public static String capitalizeWords(String sentence) {
        // split разделяет строку по пробелу
        var words = sentence.split(" ");
        // ...
    }
}

Следующим шагом нужно обойти массив получившихся слов и преобразовать первую букву каждого слова к верхнему регистру. Сделаем это с помощью метода StringUtils.capitalize(). Затем, соединим получившиеся слова в строку, которую и вернем наружу.

import org.apache.commons.lang3.StringUtils;

class MyStringUtils {
    public static String capitalizeWords(String sentence) {
        // split разделяет строку по пробелу
        var words = sentence.split(" ");
        for (var i = 0; i < words.length; i++) {
            // Приводим первую букву слова к верхнему регистру
            // И заменяем слово в массиве
            words[i] = StringUtils.capitalize(words[i]);
        }
        // Соединяет массив используя разделитель
        return String.join(" ", words);
    }
}

https://replit.com/@hexlet/java-arrays-strings-capitalize-words#MyStringUtils.java

Так как строки неизменяемые, то capitalize() просто возвращает новое значение, но не меняет старое. Поэтому нужно не забыть выполнить замену старого слова на новое: words[i] =.

В конце появляется массив из которого нужно снова собрать строку. Сделать это проще всего с помощью метода String.join(), который соединяет элементы массива в строку используя указанный соединитель. В нашем случае пробел.

У этой задачи есть и другое решение, с помощью класса StringJoiner. Этот класс работает как StringBuilder, но дополнительно позволяет указывать соединитель:

import org.apache.commons.lang3.StringUtils;

class MyStringUtils {
    public static String capitalizeWords(String sentence) {
        // split разделяет строку по пробелу
        var words = sentence.split(" ");
        // Указываем соединитель
        var result = new StringJoiner(" ");
        for (var word : words) {
            // Приводим первую букву слова к верхнему регистру
            // Добавляем полученное слово в StringJoiner при помощи метода add()
            result.add(StringUtils.capitalize(word));
        }
        // Соединяет части строки используя соединитель
        return result.toString();
    }
}

Дополнительные материалы

  1. Методы класса StringJoiner

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

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

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Программирование на Java, Разработка веб-приложений и микросервисов используя Spring Boot, проектирование REST API
10 месяцев
с нуля
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»