На собеседованиях часто задают подобные задачки:
Дана строка текста. Нужно сделать заглавной первую букву каждого слова в тексте. Для простоты считаем что мы работаем с текстом, который не содержит знаков препинания.
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();
}
}
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.