如何在Rust中以惯用和有效的方式解析由字母和数字组成的字符串?

时间:2016-12-01 15:22:01

标签: string split rust

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

我尝试了几件事:如果我使用set r = SHeets(2).range("b:b").find cell.value if r is nothing then unique = true else unique = false ,我可以在迭代一次之后char_indices()这个位置,但之后我再次获得第一部分。我也可以使用split_at()chars()尾部,但这似乎效率低下。

我也希望以优雅的方式处理错误:我不想检查每个可能的组合(字母但没有数字等),"全部或全部"结果很好。

1 个答案:

答案 0 :(得分:6)

由于您不关心错误,我假设您需要签名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))