String 如何按字符对字符串进行迭代
我有一个字符串,我需要扫描出现的每一个“foo”并读取它后面的所有文本,直到第二个String 如何按字符对字符串进行迭代,string,iterator,rust,String,Iterator,Rust,我有一个字符串,我需要扫描出现的每一个“foo”并读取它后面的所有文本,直到第二个“。因为Rust没有包含字符串函数,所以我需要通过字符扫描进行迭代。我该怎么做 编辑:Rust的&str有一个方法和步骤 我需要通过字符扫描进行迭代 返回字符串中字符的迭代器 for c in my_str.chars() { // do something with `c` } for (i, c) in my_str.chars().enumerate() { // do something
“
。因为Rust没有包含字符串函数,所以我需要通过字符扫描进行迭代。我该怎么做
编辑:Rust的&str
有一个方法和步骤
我需要通过字符扫描进行迭代
返回字符串中字符的迭代器
for c in my_str.chars() {
// do something with `c`
}
for (i, c) in my_str.chars().enumerate() {
// do something with character `c` and index `i`
}
如果您对每个字符的字节偏移量感兴趣,可以使用
查看.peek()
,并使用peek()
向前看。它是这样包装的,因为它支持UTF-8码点,而不是简单的字符向量
您还可以创建一个char
s的向量,并从那里开始处理它,但这需要更多的时间和空间:
let my_chars: Vec<_> = mystr.chars().collect();
let my_chars:Vec=mystr.chars().collect();
字符的概念非常模糊,根据您使用的数据类型,它可能意味着许多不同的东西。最明显的答案是方法。但是,这并不像宣传的那样有效。看起来像一个“字符”的是什么“对您而言,实际上可能由多个Unicode代码点组成,这可能会导致意外的结果:
“a̐”。.chars()/=>['a','\u{310}']
对于实际的字符串处理,您需要使用graphemes。图位由一个或多个表示为字符串片段的unicode代码点组成。这些更符合人类对“人物”的感知。要创建graphemes迭代器,可以使用板条箱:
使用unicode_分段::unicode分段;
对于我的街道中的grapheme.graphemes(真){
// ...
}
如果您使用的是原始ASCII,则上述任何一项都不适用于您,您只需使用字节
迭代器即可:
my_str.bytes()中的字节的{
// ...
}
尽管如此,如果您使用的是ASCII,那么可以说您根本不应该使用String
/&str
,而应该使用Vec
/&[u8]
或板条箱。您可以展示一些输入和所需输出的示例吗?这将帮助我们更清楚地了解您正试图实现的目标。这里有一个这样的循环示例,尽管我认为有更简单的方法。请注意,有许多字符串搜索算法,它们的时间复杂度并不是一种简单的方法(O(n*m)
)。这听起来像正则表达式。请注意,通过这种方式获得的字符可能与人类感知的字符的直观定义不一致。有关更多详细信息,请参阅。