我有一个&STR类型字符串,我想从中删除子字符串。 我有一个算法来计算要移除的零件的开始和结束位置。 现在如何删除子字符串?
为了更清楚地说明这一点,如果我使用C++,我会这样做:
#include<iostream>
#include<string>
int main(){
std::string foo = "Hello";
int start = 2,stop = 4;
std::cout<<foo;
foo.erase(start, stop - start);
std::cout<<std::endl<<foo<<std::endl;
}
我的Rust代码:
fn main(){
let mut foo: &str = "hello";
let start: i32 = 0;
let stop: i32 = 4;
//what goes here?
}
&str
是一个不可变的片,它有点类似于std::string_view
,所以您不能修改它。 相反,您可以使用iterator并收集新的字符串
:
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), "");
但是请记住,最后一个示例在语义上是不同的,因为它操作的是字节索引,而不是字符索引。 因此,它可能会恐慌错误的使用(例如,当start
偏移层在多字节字符的中间)。