Rust中按换行分割字符串并修剪元素的正确实现方法求助
正确实现字符串分割并修剪元素的方法
错误原因分析
- 第一个错误:
String::from(l).trim()中,String::from(l)创建了一个临时字符串,trim()返回的是该临时字符串的引用。但临时字符串会在闭包执行结束后立即销毁,导致引用悬空,编译器抛出生命周期错误。 - 第二个错误:
trim()返回的是&str类型,而你试图将其收集为Vec<String>,两者类型不匹配,因此无法完成转换。
正确实现代码
直接对分割得到的 &str 进行修剪,再转换为拥有所有权的 String,即可解决上述问题:
fn split_and_trim(text: &String) -> Vec<String> { text.split('\n') .map(|line| line.trim().to_string()) .collect() }
代码说明
split('\n'):按换行符分割输入字符串,得到一个迭代器,每个元素是原字符串的子切片&str。map(|line| line.trim().to_string()):对每个子切片调用trim()修剪首尾空白(包括换行符),再通过to_string()将修剪后的&str转换为拥有所有权的String。collect():将迭代器中的String元素收集为Vec<String>。
如果需要更简洁的写法,也可以用 to_owned() 代替 to_string(),效果完全一致:
fn split_and_trim(text: &String) -> Vec<String> { text.split('\n') .map(|line| line.trim().to_owned()) .collect() }
内容的提问来源于stack exchange,提问作者AlexNikolaev94
相关产品推荐
相关产品推荐

