Видалення лапок зі строки

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 насправді ітерує через символи рядка з обох кінців, перевіряючи їх на відповідність наданому шаблону, доки не буде знайдено символ, що не відповідає шаблону. Він ефективний для того, що робить, але завжди пам’ятайте, що він працює з юнікодними скалярними значеннями. Якщо ваш рядок може містити багатобайтні юнікодні символи, вам не потрібно турбуватися про те, що він їх розірве.

Дивіться також