我想要實現在一個字符串的開頭跳過!
或!^num
的算法:如何將Peekable迭代器轉換回原始迭代器?
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
迭代器,或者可能有更簡單的方法來實現此算法?
5秒。甚至沒有得到「新答案」通知。 :P –
@DK。那麼,我只會竊取我沒有說的答案部分。請注意,我不必將作者免責聲明,因此它看起來更合法;-) – Shepmaster
**免責聲明**:Shepmaster從'strcursor'的作者(這是我)得到了'strcursor'的建議。它應該被視爲一個例子,而不是一個建議。 –