Удаление кавычек из строки

Rust:
Удаление кавычек из строки

Как это сделать:

fn remove_quotes(s: &str) -> String {
    s.trim_matches(|c| c == '\"' || c == '\'').to_string()
}

fn main() {
    let quoted_str = "\"Привет, Растафарии!\"";
    let cleaned_str = remove_quotes(quoted_str);
    println!("{}", cleaned_str);
    // Вывод: Привет, Растафарии!
}

Иногда у вас может быть строка с разными видами кавычек, вот так:

fn main() {
    let mixed_quoted = "'Раст говорит: \"Привет, мир!\"'";
    let cleaned_str = remove_quotes(mixed_quoted);
    println!("{}", cleaned_str);
    // Вывод: Раст говорит: "Привет, мир!"
}

Здесь удаляются только наружные одинарные кавычки.

Глубокое погружение

Когда вы удаляете кавычки из строки, вы можете задаться вопросом, почему нельзя просто использовать .replace("\"", ""). Раньше обработка текста была менее стандартизированной, и разные системы имели разные способы хранения и передачи текста, часто с некими ’escape последовательностями’ для специальных символов. Метод trim_matches более универсален, позволяя указывать несколько символов для обрезки, и возможность обрезать с начала (префикс), с конца (суффикс) или с обеих сторон строки.

Конечно, есть альтернативы. Regex является мощным инструментом для манипуляции строками, способным соответствовать сложным паттернам, и будет избыточным только для удаления кавычек. Библиотеки вроде trim_in_place могли бы предложить обрезку на месте без накладных расходов на создание нового объекта String, что может быть желательно для приложений, где критична производительность.

Под капотом trim_matches на самом деле итерирует через символы строки с обоих концов, проверяя их на соответствие предоставленному шаблону до тех пор, пока не найдет символ, который не соответствует. Это эффективно для его задач, но всегда помните, что он работает с скалярными значениями Unicode. Если ваша строка может содержать многобайтовые символы Unicode, вам не о чем беспокоиться, он не разобьет их.

Смотрите также