我有一个字符串,其中一个字母后跟一个数字,例如“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/