В этой статье приведен пример как сделать первый символ каждого слова в строке заглавной буквой.
Представим ситуацию: ФИО пользователей поступают в программу в свободной форме. Для эффективной дальнейшей работы с данными необходимо эти данные нормализировать.
Примеры поступающих данных:
Пример входящих данных:
пупкин василий васильевич
ПУТИН ВЛАДИМИР ВЛАДИМИРОВИЧ
иванов-петров Иван Петрович
лУПКИН пУПА
д'анжело Жоржетта
О.генри
Как показывают представленные данные, недостаточно просто изменить регистр каждой буквы после пробела. В таком случае мы не сможем обрабатывать имена и фамилии, записанные с использованием специальных символов, таких как дефис ‘-’ и тире ‘—’ в двойных фамилиях, символы апострофа ‘`’ и точки ‘.’. Возможно, это не все необычные символы, которые можно добавить в имя и фамилию.
Для решения этой задачи напишем такую функцию:
private fun upperCaseAllFirstCharacter(text: String): String {
val regex = "\\b(.)(.*?)\\b";
return Pattern.compile(regex).matcher(text.lowercase()).replaceAll {
it.group(1).uppercase() + it.group(2)
}
}
Что здесь происходит:
Создается переменная regex, которая содержит регулярное выражение "\\b(.)(.*?)\\b". Регулярное выражение используется для поиска слов в строке.
- \\b - обозначает границу слова.
- (.) - захватывает первый символ слова в группу.
- (.*?) - захватывает остальные символы слова (любое количество символов) во вторую группу.
- \\b - обозначает границу слова.
Вызывается метод, matcher, который меняет регистр выражения в нижний. Метод replaceAll заменяет все найденные соответствия в строке согласно логике, определенной в переданном лямбда-выражении { it.group(1).uppercase() + it.group(2) }..
В этом выражении:
- it.group(1) - обращается к первой захваченной группе (первому символу слова).
- it.group(2) - обращается ко второй захваченной группе (остальным символам слова).
- it.group(1).uppercase() + it.group(2) - объединяет первую группу (первый символ) в верхнем регистре с второй группой (остальные символы).
Таким образом, вызов функции upperCaseAllFirstCharacter с передачей строки text возвращает новую строку, где все первые символы каждого слова преобразованы в верхний регистр.
Что мы получим на выходе для вводных данных из начала статьи:
Пупкин Василий Васильевич
Путин Владимир Владимирович
Иванов-Петров Иван Петрович
Лупкин Пупа
Д'Анжело Жоржетта
О.Генри