我想编写一个带有可变字符串的函数,并检查第一个和最后一个字符是否为"
字符。如果是这样,那么这两个字符应该用反引号字符`
替换。我已经提出了这个解决方案:
fn replace_wrapping_char(s: &mut String) {
if s.len() > 1 && s.starts_with('"') && s.ends_with('"') {
unsafe {
let v = s.as_mut_vec();
v[0] = '`' as u8;
*v.last_mut().unwrap() = '`' as u8;
}
}
}
这似乎有用(是的,'`'.is_ascii()
返回true),但它使用unsafe
和对我来说有点难看。
有没有一种安全,简洁的方法来实现我的目标?
答案 0 :(得分:1)
这是一个安全,缩短版本的功能,虽然它不会有内存效率。这将创建一个副本并重新分配给定的字符串,因此返回新字符串的纯函数原型可能更适合这里。它还依赖于双引号字符在UTF-8中为1字节大小的事实。
fn replace_wrapping_char(s: &mut String) {
if s.len() > 1 && s.starts_with('"') && s.ends_with('"') {
*s = format!("`{}`", &s[1 .. s.len()-1])
}
}