【发布时间】:2020-09-22 23:30:50
【问题描述】:
我正在尝试做一些简单的事情。在u8 的片段中,我想找到两个字符"\r\n" 的出现。但是,我无法使用from_utf8 将该切片转换为String,因为"\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
可能是我错过了一些非常简单的东西,但现在坚持了很长一段时间。
【问题讨论】:
-
您可能对this question 感兴趣,了解如何在切片中查找序列。
-
@SCappella 确实是我想要的。谢谢!
标签: rust iterator regex-lookarounds peek