我希望实现一个算法,能够跳过字符串开头的
!
或者!^num
:fn extract_common_part(a: &str) -> Option<&str> {
let mut it = a.chars();
if it.next() != Some('!') {
return None;
}
let mut jt = it.clone().peekable();
if jt.peek() == Some(&'^') {
it.next();
jt.next();
while jt.peek().map_or(false, |v| !v.is_whitespace()) {
it.next();
jt.next();
}
it.next();
}
Some(it.as_str())
}
fn main() {
assert_eq!(extract_common_part("!^4324 1234"), Some("1234"));
assert_eq!(extract_common_part("!1234"), Some("1234"));
}
这段代码是可行的,但是我找不到从Peekable
迭代器返回到Chars
迭代器的方法,所以不得不推进it
和jt
迭代器。这会导致重复的代码。
有没有办法从Peekable
迭代器返回到相应的Chars
迭代器,或者有更简单的实现算法的方法?
strcursor
的作者(即我)那里得到了strcursor
的建议。它应该更多地被视为一个示例,而不是一种推荐。 - DK.