gpt4 book ai didi

rust - 在遍历字符串时消耗字符串的一部分

转载 作者:行者123 更新时间:2023-11-29 07:54:36 25 4
gpt4 key购买 nike

我正在尝试解析格式与此类似的特定字符串:

prefix,body1:body2

我想使用 .chars 方法和其他方法,如 .take_while 和其他类似的方法:

let chars = str.chars();
let prefix: String = chars.take_while(|&c| c != ',').collect();
let body1: String = chars.take_while(|&c| c != ':').collect();
let body2: String = chars.take_while(|_| true).collect();

( Playground )

但是编译器提示:

error: use of moved value: `chars` [E0382]
let body1: String = chars.take_while(|&c| c != ':').collect();
^~~~~
help: see the detailed explanation for E0382
note: `chars` moved here because it has type `core::str::Chars<'_>`, which is non-copyable
let prefix: String = chars.take_while(|&c| c != ',').collect();
^~~~~

我可以将其重写为普通的 for 循环并累加值,但这是我想避免的事情。

最佳答案

在分隔符上拆分字符串可能是最简单的:

fn main() {
let s = "prefix,body1:body2";
let parts: Vec<_> = s.split(|c| c == ',' || c == ':').collect();
println!("{:?}", parts);
}

但是,如果您想使用迭代器,可以通过使用 Iterator::by_ref 对其进行可变引用来避免使用 Chars 迭代器。 :

let str = "prefix,body1:body2";
let mut chars = str.chars();
let prefix: String = chars.by_ref().take_while(|&c| c != ',').collect();
let body1: String = chars.by_ref().take_while(|&c| c != ':').collect();
let body2: String = chars.take_while(|_| true).collect();

有关 by_ref 的更多信息,请参阅:

关于rust - 在遍历字符串时消耗字符串的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35513290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com