【问题标题】:Split string at nth occurrence of a character in Rust在 Rust 中第 n 次出现字符时拆分字符串
【发布时间】:2021-08-10 14:29:44
【问题描述】:

【问题讨论】:

    标签: rust


    【解决方案1】:

    您可以使用match_indices() 获取位置,然后使用split_at() 拆分字符串。如果您想排除实际字符,它有点复杂,但您可以使用char_indices() 跳过一个。这感觉有点重,但我找不到更简单的方法。

    /// Search `s` for the `n`th occurrence of `p`, then split the string
    /// into two halves around that point.
    fn split_at_nth_char(s: &str, p: char, n: usize) -> Option<(&str, &str)> {
        s.match_indices(p).nth(n).map(|(index, _)| s.split_at(index))
    }
    
    /// Same as `split_at_nth_char` but don't include the character.
    fn split_at_nth_char_ex(s: &str, p: char, n: usize) -> Option<(&str, &str)> {
        split_at_nth_char(s, p, n).map(|(left, right)| {
            (
                left,
                // Trim 1 character.
                &right[right.char_indices().nth(1).unwrap().0..],
            )
        })
    }
    
    fn main() {
        dbg!(split_at_nth_char("this/is/a/string", '/', 1));
        dbg!(split_at_nth_char("this/is/a/string", '/', 2));
        dbg!(split_at_nth_char("this/is/a/string", '/', 3));
        dbg!(split_at_nth_char_ex("this/is/a/string", '/', 1));
    }
    

    输出:

    [src/main.rs:19] split_at_nth_char("this/is/a/string", '/', 1) = Some(
        (
            "this/is",
            "/a/string",
        ),
    )
    [src/main.rs:20] split_at_nth_char("this/is/a/string", '/', 2) = Some(
        (
            "this/is/a",
            "/string",
        ),
    )
    [src/main.rs:21] split_at_nth_char("this/is/a/string", '/', 3) = None
    [src/main.rs:22] split_at_nth_char_ex("this/is/a/string", '/', 1) = Some(
        (
            "this/is",
            "a/string",
        ),
    )
    

    【讨论】:

      猜你喜欢
      • 2019-04-02
      • 1970-01-01
      • 2017-12-24
      • 2013-06-08
      • 1970-01-01
      • 2021-08-12
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多