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, вам не о чем беспокоиться, он не разобьет их.
Смотрите также
- Документация 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