我有一个String
价值,我想要trim() https://doc.rust-lang.org/stable/std/string/struct.String.html#method.trim它。我可以做类似的事情:
let trimmed = s.trim().to_string();
但这总会创造出新的String
例如,即使在现实生活中,绳子更有可能已经被修剪。为了避免多余的新String
创造,我可以做这样的事情:
let ss = s.trim();
let trimmed = if ss.len() == s.len() { s } else { ss.to_string() };
但这是相当冗长的。有没有更简洁的方法来完成上述操作?
我想不出更简洁的方法来做到这一点。事实上,它看起来非常简洁:您需要告诉编译器修剪字符串,然后如果字符串长度相同则返回原始字符串,否则创建一个新字符串。 String 上没有“修剪但如果相等则返回原始字符串”方法。
也就是说,你可以创造自己的特质TrimOwned
例如,它有这样一个方法(由 StackOverflower 提供):
trait TrimOwned {
fn trim_owned(self) -> Self;
}
impl TrimOwned for String {
fn trim_owned(self) -> Self {
let s = self.trim();
if s.len() == self.len() {
self
} else {
s.to_string()
}
}
}
fn main() {
let left = " left".to_string();
let right = "right ".to_string();
let both = " both ".to_string();
println!("'{}'->'{}'", left.clone(), left.trim_owned());
println!("'{}'->'{}'", right.clone(), right.trim_owned());
println!("'{}'->'{}'", both.clone(), both.trim_owned());
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)