String 如何从生锈的另一个字符串中删除单个尾随字符串?

String 如何从生锈的另一个字符串中删除单个尾随字符串?,string,rust,String,Rust,给定以下两个字符串: let subject: &str = "zoop-12"; let trail: &str "-12"; 我如何才能从主题中删除trail一次?我只想在subject末尾有这些字符的情况下执行此操作,因此在这种情况下,我不希望删除任何内容: let subject: &str "moop-12loop"; let not_a_trail: &str = "-12"; 我可以成为字符串或&str,但为了简洁起见,我选择使用&str。您的规

给定以下两个字符串:

let subject: &str = "zoop-12";
let trail: &str "-12";
我如何才能从
主题中删除
trail
一次?我只想在
subject
末尾有这些字符的情况下执行此操作,因此在这种情况下,我不希望删除任何内容:

let subject: &str "moop-12loop";
let not_a_trail: &str = "-12";

我可以成为
字符串
&str
,但为了简洁起见,我选择使用
&str

您的规范与非常相似,但您只想修剪一个后缀,而
修剪尾端匹配的
将修剪所有后缀

这是一个与切片一起使用的函数,用于仅删除一个后缀:

fn remove_suffix<'a>(s: &'a str, p: &str) -> &'a str {
    if s.ends_with(p) {
        &s[..s.len() - p.len()]
    } else {
        s
    }
}
fn删除后缀&'a str{
如果s.以(p)结尾{
&s[…s.len()-p.len()]
}否则{
s
}
}
切片永远不会死机,因为如果模式匹配,
s[s.len()-p.len()]
保证位于字符边界上