【发布时间】:2021-08-10 14:29:44
【问题描述】:
如何在 Rust 中第 N 次出现字符时拆分字符串?
另见:
【问题讨论】:
标签: rust
如何在 Rust 中第 N 次出现字符时拆分字符串?
另见:
【问题讨论】:
标签: rust
您可以使用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",
),
)
【讨论】: