use std::str::FromStr;
fn split_string<T: AsRef<str>>(input: T, delimiters: &str) -> Vec<&str> {
let input_str = input.as_ref();
input_str.split(|c| delimiters.contains(c)).collect()
}
说明
- 泛型定义:函数
split_string
接受一个泛型参数 T
,它实现了 AsRef<str>
trait,这样可以接受任何可以转换为 &str
的类型作为输入字符串。
- 分割操作:使用
split
方法,该方法接受一个闭包,闭包判断字符是否在 delimiters
字符串中。
- 返回结果:使用
collect
方法将分割后的迭代器转换为 Vec<&str>
。
效率和内存管理
- 效率:
split
方法是 Rust 标准库中针对字符串分割优化过的方法,在遍历字符串时直接记录分割位置,而不是创建新的字符串实例,效率较高。
- 内存管理:返回的是
&str
切片,避免了字符串内容的重复拷贝,在内存使用上达到最优。
边界情况和潜在性能瓶颈
- 边界情况:
- 输入字符串为空时,
split
方法会返回一个空的迭代器,collect
会生成一个空的 Vec
。
delimiters
为空字符串时,split
方法会将整个输入字符串作为一个元素返回。
- 潜在性能瓶颈:
- 如果输入字符串非常长且分隔符很多,遍历和判断字符是否为分隔符的操作可能会有一定性能开销。但这是基于当前需求下标准库提供的高效实现,一般情况下可以接受。如果性能要求极高,可以考虑更底层的字符串解析方式。