我正在尝试做一些简单的事情,在一个切片中,我想查找两个字符"\r\n"
的出现次数。然而,我不能使用from_utf8
将该切片转换为字符串
,因为"\r\n"
之后的部分可能不是utf-8编码,而且我尽量不想使用from_utf8_unchecked
。所以我尝试了以下方法。
fn find_crlf(text: &[u8]) -> Option<usize> {
let mut textiter = text.iter().peekable();
for (idx, &elem) in textiter.enumerate() {
if Some(&elem) == Some(&b'\r') {
if textiter.peek() == Some(&&b'\n') {
return Some(idx);
}
}
}
None
}
我遇到了以下编译错误,这是可以理解的。但是我不太确定该怎么做。如果它是一个 str
,那么只需使用 .find("\r\n")
。
编译错误 ->
error[E0382]: borrow of moved value: `textiter`
--> src/lib.rs:6:16
|
2 | let mut textiter = text.iter().peekable();
| ------------ move occurs because `textiter` has type `std::iter::Peekable<std::slice::Iter<'_, u8>>`, which does not implement the `Copy` trait
3 |
4 | for (idx, &elem) in textiter.enumerate() {
| -------- value moved here
5 | if Some(&elem) == Some(&b'\r') {
6 | if textiter.peek() == Some(&&b'\n') {
| ^^^^^^^^ value borrowed here after move
也许我错过了一些非常简单的东西,但是我已经卡在这里很长时间了。