我需要写一个函数,它接受一个字符串作为输入,通过换行符分割它,并在分割的每个条目中修剪所有冗余的换行符。我已经提出了以下内容:
fn split_and_trim(text: &String) {
let lines - text.split('\n').map(|l| String::from(l).trim());
println!("{:?}", lines)
}
但这段代码返回以下错误:
6 | let lines = text.map(|l| String::from(l).trim());
| ---------------^^^^^^^
| |
| returns a reference to data owned by the current function
| temporary value created here
试着用下面的方式重写:
let lines: Vec<String> = text.split('\n').map(|l| String::from(l).trim()).collect();
返回另一个错误:
value of type `Vec<String>` cannot be built from `std::iter::Iterator<Item=&str>`
实现这个目标的正确方法是什么(拆分字符串并修剪每个元素)?提前感谢!
1条答案
按热度按时间ycl3bljg1#
您不需要在这里创建新的
String
,因为trim
只需要切片。(playground)在几乎所有情况下,您还应该将
&str
而不是&String
作为函数参数。如果你需要
String
s,你可以在修剪后转换它们。