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("\"", "")
。早期,处理文本的标准化较少,不同系统有存储和传输文本的不同方式,通常对特殊字符使用某种“转义序列”。Rust 的 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