如何在换行之前处理数据,直到我连续找到两个换行,然后再处理所有剩余数据?

时间:2019-06-07 17:44:08

标签: split rust

我有一个Vec<u8>,我想在\n上拆分并逐行处理它。在某个点上有一条空行,我想将整个向量的其余部分分成一个块(而不是逐行处理)。这种事情在HTTP或Git提交对象中很常见。

例如:

key: value
otherkey: othervalue

This is the content
that is now just a big
block. I don't care about
newlines here.

是否有一种优雅的方法可以用Rust解析它?我可以这样分割它:

pub fn main() {
    let data: Vec<u8> = "key: value\notherkey: othervalue\n\nThis is the content\nthat is now just a big\nblock. I don't care about\nnewlines here.".as_bytes().to_owned();

    for line in data.split(|&c| c == '\n' as u8) {
        println!("Line: {:?}", line);
        if line.len() == 0 {
            // Start of message...
        } else {
            // Header
        }
    }
}

但是,当我到达\n\n时,找不到办法说“从这里给我Vec的其余部分”。如果有一种split()形式返回带索引的切片,而不是实际的内容,那很容易,但是我似乎找不到一个。

是否有一种优雅的方式来做到这一点呢?它不仅会拆分邮件,然后将其重新合并在一起?

1 个答案:

答案 0 :(得分:2)

您可以轻松获取每个切片的长度,跟踪当前偏移量,并亲自完成最后一个切片:

<button id="button" onclick="togglevisible('menu');">Click Me</button>
<div id="menu">
  <button>Button 1</button>
  <button>Button 2</button>
  <button>Button 3</button>
</div>

另请参阅: