我有一个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()
形式返回带索引的切片,而不是实际的内容,那很容易,但是我似乎找不到一个。
是否有一种优雅的方式来做到这一点呢?它不仅会拆分邮件,然后将其重新合并在一起?
答案 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>
另请参阅: