Как я могу заменить отдельные символы в Rust?
Итак, у меня есть строка "Hello World!" и хотите заменить "!" с "?" так что новая строка "Hello World?"
В Ruby мы можем сделать это легко с помощью метода gsub
:
"Hello World!".gsub("!", "?")
Как это сделать идиоматично в Rust?
Ответы
Ответ 1
Вы можете заменить все вхождения одной строки в другой на std::str::replace
:
let result = str::replace("Hello World!", "!", "?");
// Equivalently
result = "Hello World!".replace("!", "?");
println!("{}", result); // => "Hello World?"
В более сложных случаях вы можете использовать regex::Regex::replace_all
из 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
Также вы можете использовать итераторы и выражение match
:
let s:String = "Hello, world!".chars()
.map(|x| match x {
'!' => '?',
'A'..='Z' => 'X',
'a'..='z' => 'x',
_ => x
}).collect();
println!("{}", s);// Xxxxx, xxxxx?
Ответ 3
Я создал эту функцию, чтобы изменить существующую String
. Он заменяет все вхождения. Он работает как для char
так и для строк.
fn replace_existing(target: &mut String, old: &str, new: &str) {
loop {
match target.find(old) {
Some(i) => {
target.replace_range(i..i + old.len(), new);
}
None => break,
}
}
}