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

New*_*yte 5 string rust

给定以下两个字符串:

let subject: &str = "zoop-12";
let trail: &str "-12";
Run Code Online (Sandbox Code Playgroud)

我怎么会去删除trailsubject只有一次?我只想subject在末尾有这些字符的情况下执行此操作,因此在这种情况下,我不希望删除任何内容:

let subject: &str "moop-12loop";
let not_a_trail: &str = "-12";
Run Code Online (Sandbox Code Playgroud)

我可以使用 aString&str,但&str为了简洁起见,我选择使用。

Use*_*ser 9

还有str::strip_suffix

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)


tre*_*tcl 7

您的规范与 非常相似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()]则保证位于字符边界上。