给定以下两个字符串:
let subject: &str = "zoop-12";
let trail: &str "-12";
Run Code Online (Sandbox Code Playgroud)
我怎么会去删除trail从subject只有一次?我只想subject在末尾有这些字符的情况下执行此操作,因此在这种情况下,我不希望删除任何内容:
let subject: &str "moop-12loop";
let not_a_trail: &str = "-12";
Run Code Online (Sandbox Code Playgroud)
我可以使用 aString或&str,但&str为了简洁起见,我选择使用。
fn remove_suffix<'a>(s: &'a str, suffix: &str) -> &'a str {
match s.strip_suffix(suffix) {
Some(s) => s,
None => s
}
}
fn main() {
let subject: &str = "zoop-12";
//let subject: &str = "moop-12loop";
let trail: &str = "-12";
let stripped_subject = remove_suffix(subject, trail);
println!("{}", stripped_subject);
}
Run Code Online (Sandbox Code Playgroud)
您的规范与 非常相似trim_end_matches,但您只想修剪一个后缀,而trim_end_matches将修剪所有后缀。
这是一个与切片一起使用的函数,ends_with仅删除一个后缀:
fn remove_suffix<'a>(s: &'a str, p: &str) -> &'a str {
if s.ends_with(p) {
&s[..s.len() - p.len()]
} else {
s
}
}
Run Code Online (Sandbox Code Playgroud)
切片永远不会恐慌,因为如果模式匹配,s[s.len() - p.len()]则保证位于字符边界上。
| 归档时间: |
|
| 查看次数: |
1595 次 |
| 最近记录: |