如何在Rust中实现字符串指定单引号字符的重复处理?
解决字符串中单引号重复的问题
需求:将字符串中的单引号字符替换为两个单引号,例如输入O'Brian,输出O''Brian。
你的代码存在几处问题,修正后的可运行版本如下:
use std::iter; pub fn sanitize_string(input: String) -> String { input .chars() .flat_map(|c| { if c == '\'' { iter::repeat(c).take(2) } else { iter::once(c) } }) .collect() }
问题说明与修正点:
- 移除不必要的
async:函数内无异步操作,标记async完全多余,只会增加不必要的复杂度。 - 删除分支末尾的分号:Rust中
if-else是表达式,分支后的分号会让表达式返回空单元(),但flat_map要求返回迭代器类型。去掉分号后,分支才会正确返回对应的迭代器。 - 简化冗余调用:
iter::once(c)本身就是仅生成单个元素的迭代器,无需额外调用take(1)。 - 修正函数名拼写:原代码中的
sanize_string应为标准拼写sanitize_string。 - 导入必要模块:使用
iter::repeat和iter::once需要先导入std::iter模块。
测试示例:
fn main() { let input = "O'Brian".to_string(); let output = sanitize_string(input); assert_eq!(output, "O''Brian"); }
内容的提问来源于stack exchange,提问作者Antonin GAVREL
相关产品推荐
相关产品推荐

