我有一个字母,后跟一个数字,如" 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()
尾部,但这似乎效率低下。
我也希望以优雅的方式处理错误:我不想检查每个可能的组合(字母但没有数字等),"全部或全部"结果很好。
答案 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))