如何在 Rust 中习惯性地替换特定字符?

所以我有字符串“ Hello World!”还想换掉“ !”“ ?”所以新字符串是“ Hello World?”

在 Ruby 中,我们可以通过 gsub方法很容易地做到这一点:

"Hello World!".gsub("!", "?")

在 Rust 中如何用惯用语做到这一点?

62374 次浏览

您可以用 str::replace替换一个字符串在另一个字符串中出现的所有情况:

let result = str::replace("Hello World!", "!", "?");
// Equivalently:
result = "Hello World!".replace("!", "?");
println!("{}", result); // => "Hello World?"

对于更复杂的情况,您可以使用来自 正则表达式regex::Regex::replace_all:

use regex::Regex;
let re = Regex::new(r"[A-Za-z]").unwrap();
let result = re.replace_all("Hello World!", "x");
println!("{}", result); // => "xxxxx xxxxx!"

还可以使用迭代器和 match表达式:

let s:String = "Hello, world!".chars()
.map(|x| match x {
'!' => '?',
'A'..='Z' => 'X',
'a'..='z' => 'x',
_ => x
}).collect();
println!("{}", s);// Xxxxx, xxxxx?