这是我目前拥有的代码:

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))
}

有没有一种更简单或内置的方法可以做到这一点?

推荐答案

我找到了另一个更优雅的解决方案:

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,
    }
}

fn split_first_char(s: &str) -> Option<(char, &str)> {
    let mut chars = s.chars();
    chars.next().map(|c| (c, chars.as_str()))
}

Rust相关问答推荐

如何导出 rust 色二进制文件中的符号

如果LET;使用布尔表达式链接(&Q);

使用铁 rust S还原对多个数组执行顺序kronecker积

S,一般性状和联想型性状有什么不同?

在使用AWS SDK for Rust时,如何使用硬编码访问密钥ID和密钥凭据?

在我的Cargo 中,当我在建筑物中使用时,找不到我可以在产品包中使用的 crate .r我如何解决这个问题?

为什么 `Deref` 没有在 `Cell` 上实现?

Rust wasm 中的 Closure::new 和 Closure::wrap 有什么区别

为什么特征默认没有调整大小?

如何处理闭包中的生命周期以及作为参数和返回类型的闭包?

我如何取消转义,在 Rust 中多次转义的字符串?

为什么 `tokio::join!` 宏不需要 Rust 中的 `await` 关键字?

如何判断服务器是否正确接收数据

`use std::error::Error` 声明中断编译

字符串切片的向量超出范围但原始字符串仍然存在,为什么判断器说有错误?

我如何将特征作为 struct 的拥有字段?

在 Rust 中为泛型 struct 编写一次特征绑定

是否有适当的方法在参考 1D 中转换 2D 数组

为什么分配对变量的引用使我无法返回它

Rust 生命周期:不能在方法内重新borrow 可变字段