string - 如何在 Rust 中惯用且高效地解析由字母和数字组成的字符串?

标签 string split rust

我有一个字符串,其中一个字母后跟一个数字,例如“R123”。该字母保证是ASCII,解决方案不应依赖于utf-8编码。如何从中提取第一个字母,同时将数字转换为整数类型?当然,我希望这是惯用的和高效的。

我尝试了几件事:如果我使用 char_indices(),我可以在迭代一次后 split_at() 位置,但我又得到了第一部分。我也可以使用 chars()collect() 尾部,但这似乎效率很低。

我还想以优雅的方式处理错误:我不想检查所有可能的组合(字母但没有数字等),“全有或全无”的结果很好。

最佳答案

既然你不关心这个错误,我假设你想要一个签名的函数fn(&str) -> Option<(char, u32)> .您可以使用 .chars() 的事实返回一个迭代器,您可以将其变回 &str包含迭代器的其余部分:

fn parse(s: &str) -> Option<(char, i32)> {
    let mut iter = s.chars();
    iter.next().and_then(|c| {
        if c.is_alphabetic() {
            iter.as_str().parse().ok().map(|i| {
                (c, i)
            })
        } else {
            None
        }
    })
}

println!("{:?}", parse("R1234"))将打印 Some(('R', 1234))

关于string - 如何在 Rust 中惯用且高效地解析由字母和数字组成的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40914319/

相关文章:

rust - Actix Web是否不处理发布请求?

rust - 无法将 Vec<u8> 传递给采用 &mut Read 的函数

oracle - 如何在Oracle中一起替换多个字符串

string - 为什么 CALL SET 在 CMD Windows 和 .CMD 文件中的工作方式不同?

c++ - 将字符串转换为字符数组,但 strcpy() 给出错误

c - 在C中分割多行字符串

c++ - 我可以使用 memcmp 两个比较多字节字符串吗?

java - 用 ".split"分割字符串,但将分隔符(字符串)保留在匹配数组中

javascript - JavaScript 中最可靠的字符串分割字符

enums - 返回具有 'static tell the compiler this value doesn' t 的类型是否具有关联的生命周期,或者它是否使该值静态?