...これはなぜ起こるか私は(String
がIndexMut<usize>
を実装していません)知っているが、私はこれを解決する方法がわかりませんあなたは対処しています。
fn main() {
let mut s = "poyo".to_string();
let mut bytes = s.into_bytes();
bytes[1] = 'i' as u8;
unsafe { s = String::from_utf8_unchecked(bytes) }
println!("{}", s);
}
か::
fn main() {
let mut s = "poyo".to_string();
unsafe {
let bytes = s.as_bytes_mut();
bytes[1] = 'i' as u8;
}
println!("{}", s);
}
あなただけ(すべての文字のサイズが1バイトで、あなただけの直下
Vec<u8>
を操作することができることを意味する)ASCII
で作業している場合は、次の操作を行うことができ しかし、マルチバイト文字を使用している場合(String
にはIndexMut
またはIndex
が実装されていない)、安全な方法は、Chars
イテレータを使用してその上に新しいString
の要素に基づいて:
fn main() {
let s = "poyo".to_string();
let iter = s.chars();
let mut new = String::new();
for (i, mut c) in iter.enumerate() {
if i == 1 { c = 'i'; }
new.push(c);
}
println!("{}", new);
}