这是我目前拥有的代码:
fn split_first_char(s: &str) -> Option<(char, &str)> {
let mut char_indices = s.char_indices();
let (_, c) = char_indices.next()?;
let i = match char_indices.next() {
Some((i, _)) => i,
None => s.len(),
};
Some((c, s.split_at(i).1))
}
Run Code Online (Sandbox Code Playgroud)
有没有更简单或内置的方法可以做到同样的事情?
我找到了另一个更优雅的解决方案:
fn split_first_char(s: &str) -> Option<(char, &str)> {
let mut chars = s.chars();
match chars.next() {
Some(c) => Some((c, chars.as_str())),
None => None,
}
}
Run Code Online (Sandbox Code Playgroud)
或者
fn split_first_char(s: &str) -> Option<(char, &str)> {
let mut chars = s.chars();
chars.next().map(|c| (c, chars.as_str()))
}
Run Code Online (Sandbox Code Playgroud)