Rust:
Видалення лапок зі строки
Як це зробити:
fn remove_quotes(s: &str) -> String {
s.trim_matches(|c| c == '\"' || c == '\'').to_string()
}
fn main() {
let quoted_str = "\"Привіт, Rustaceans!\"";
let cleaned_str = remove_quotes(quoted_str);
println!("{}", cleaned_str);
// Вивід: Привіт, Rustaceans!
}
Іноді у вас може бути рядок із змішаними лапками, як ось тут:
fn main() {
let mixed_quoted = "'Rust каже: \"Привіт, Світе!\"'";
let cleaned_str = remove_quotes(mixed_quoted);
println!("{}", cleaned_str);
// Вивід: Rust каже: "Привіт, Світе!"
}
Тут видаляються лише зовнішні одинарні лапки.
Поглиблений огляд
Коли ви видаляєте лапки з рядка, вам може здатися, чому просто не використати .replace("\"", "")
. На початках роботи з текстом все було менш стандартизовано, і різні системи мали різні способи зберігання та передачі тексту, часто з якоюсь «секвенцією екранування» для спеціальних символів. Метод trim_matches
Rust більш універсальний, дозволяючи вказати кілька символів для обрізання та чи обрізати з початку (префіксу), кінця (суфіксу) або обох сторін рядка.
Звичайно, є альтернативи. Регулярні вирази - це потужний інструмент для маніпуляцій з рядками, здатний збігатися зі складними шаблонами, і буде занадто складним для простого видалення лапок. Бібліотеки на кшталт trim_in_place
можуть пропонувати обрізання на місці без необхідності створювати новий об’єкт String
, що може бути бажаним для застосувань, критичних з точки зору продуктивності.
Під капотом trim_matches
насправді ітерує через символи рядка з обох кінців, перевіряючи їх на відповідність наданому шаблону, доки не буде знайдено символ, що не відповідає шаблону. Він ефективний для того, що робить, але завжди пам’ятайте, що він працює з юнікодними скалярними значеннями. Якщо ваш рядок може містити багатобайтні юнікодні символи, вам не потрібно турбуватися про те, що він їх розірве.
Дивіться також
- Документація Rust по маніпуляції з рядками: https://doc.rust-lang.org/book/ch08-02-strings.html
- Крейт
regex
для складних шаблонів: https://crates.io/crates/regex - Rust на прикладах для практичних сценаріїв програмування: https://doc.rust-lang.org/stable/rust-by-example/std/str.html