Rust:
Преобразование строки в верхний регистр
Как это сделать:
В Rust нет встроенного метода для преобразования каждого слова строки в заглавные буквы, но мы можем легко реализовать свой собственный, используя метод to_ascii_uppercase
для отдельных символов и пройдясь циклом по словам.
fn capitalize_words(s: &str) -> String {
s.split_whitespace()
.map(|word| {
let mut chars = word.chars();
match chars.next() {
None => String::new(),
Some(first) => first.to_ascii_uppercase().to_string() + chars.as_str(),
}
})
.collect::<Vec<_>>()
.join(" ")
}
fn main() {
let sentence = "hello world";
println!("{}", capitalize_words(sentence));
}
Пример вывода:
Hello World
Подробнее:
Исторически Rust придавал значение минимализму стандартной библиотеки, с многими вспомогательными функциями, предоставляемыми сообществом через крейты. Для преобразования регистра строк вы можете использовать крейт heck
для более продвинутых преобразований регистра, таких как CamelCase, snake_case и других.
Преобразование строки в заглавные буквы может быть сложным с символами юникода. Тип char
в Rust представляет собой скалярное значение Unicode, что позволяет корректно обрабатывать большинство символов. При работе с полной нормализацией Unicode следует рассмотреть использование более продвинутых библиотек, таких как unicode-segmentation
, для операций, учитывающих кластеры графем.
С точки зрения реализации, наша функция capitalize_words
не является высокопроизводительной, так как она выделяет новую строку для каждого слова. В приложениях, требующих высокой производительности, было бы полезно оптимизировать манипуляции со строками, чтобы избежать чрезмерных выделений памяти.
Смотрите также:
- Документация Rust по ‘char’: https://doc.rust-lang.org/std/primitive.char.html
- Крейт ‘Heck’ для преобразований регистра: https://crates.io/crates/heck
- ‘Формы нормализации Unicode’ в Rust: https://unicode-rs.github.io/unicode-normalization/unicode_normalization/index.html
- Книга Rust для дополнительной информации о строках: https://doc.rust-lang.org/book/ch08-02-strings.html