rust Map拆分以修剪每个条目

bqjvbblv  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(121)

我需要写一个函数,它接受一个字符串作为输入,通过换行符分割它,并在分割的每个条目中修剪所有冗余的换行符。我已经提出了以下内容:

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>`

实现这个目标的正确方法是什么(拆分字符串并修剪每个元素)?提前感谢!

ycl3bljg

ycl3bljg1#

您不需要在这里创建新的String,因为trim只需要切片。(playground)

fn split_and_trim(text: &str) {
    let lines: Vec<&str> = text.split('\n').map(|l| l.trim()).collect();
    println!("{:?}", lines)
}

在几乎所有情况下,您还应该将&str而不是&String作为函数参数。
如果你需要String s,你可以在修剪后转换它们。

相关问题