How do I replace specific characters idiomatically

2020-06-30 09:12发布

问题:

So I have the string "Hello World!" and want to replace the "!" with "?" so that the new string is "Hello World?"

In Ruby we can do this easily with the gsub method:

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

How to do this idiomatically in Rust?

回答1:

You can replace all occurrences of one string within another with std::str::replace:

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

For more complex cases, you can use regex::Regex::replace_all from regex:

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


回答2:

Also you can use iterators and match expression:

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


标签: regex rust