代码之家  ›  专栏  ›  技术社区  ›  AlexNikolaev94

映射分割以修剪每个条目

  •  0
  • AlexNikolaev94  · 技术社区  · 1 年前

    我需要编写一个函数,以字符串作为输入,通过换行符对其进行拆分,并修剪拆分的每个条目中的所有多余换行符。我想出了以下办法:

    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 回复  |  直到 1 年前
        1
  •  2
  •   drewtato    1 年前

    你不需要创建新的 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 在几乎所有情况下都作为函数参数。

    如果需要 一串 s、 修剪后可以转换它们。