&str
- неизменяемый фрагмент, он чем-то похож на std::string_view
, поэтому вы не можете его изменить. Вместо этого вы можете использовать итератор и собрать новый String
:
let removed: String = foo
.chars()
.take(start)
.chain(foo.chars().skip(stop))
.collect();
, иначе можно было бы изменить String
на месте:
let mut foo: String = "hello".to_string();
// ...
foo.replace_range((start..stop), "");
Имейте в виду, однако, что последний пример семантически отличается, поскольку он работает с байтовыми индикаторами, а не с символами. Следовательно, при неправильном использовании может возникнуть ошибка c (например, когда смещение start
находится в середине многобайтового символа).