use*_*584 50 string iterator rust
我有一个字符串,我需要扫描每次出现的"foo"并读取其后的所有文本,直到一秒钟"
.由于Rust没有,我需要通过字符扫描来迭代它.我该怎么做?contains
字符串函数
编辑:Rust &str
有一个contains()
和find()
方法.
cen*_*lug 83
我需要通过字符扫描来迭代它.
该.chars()
方法返回字符串中字符的迭代器.例如
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`
}
Run Code Online (Sandbox Code Playgroud)
如果您对每个字符的字节偏移感兴趣,可以使用char_indices
.
调查.peekable()
,并peek()
用于展望未来.它是这样包装的,因为它支持UTF-8代码点,而不是简单的字符向量.
你也可以创建一个char
s 向量并从那里开始工作,但这需要更多的时间和空间:
let my_chars: Vec<_> = mystr.chars().collect();
Run Code Online (Sandbox Code Playgroud)
Ibr*_*med 30
“字符”的概念非常模糊,根据您所使用的数据类型,它可能意味着许多不同的事物。最明显的答案是chars
方法。然而,这并不像宣传的那样有效。对您来说看似单个“字符”的内容实际上可能由多个 Unicode代码点组成,这可能会导致意外结果:
"a\xcc\x90".chars() // => [\'a\', \'\\u{310}\']\n
Run Code Online (Sandbox Code Playgroud)\n对于大量字符串处理,您需要使用graphemes。字素由表示为字符串切片的一个或多个 unicode 代码点组成。这些更好地映射了人类对“角色”的感知。要创建字素迭代器,您可以使用unicode-segmentation
crate:
use unicode_segmentation::UnicodeSegmentation;\n\nfor grapheme in my_str.graphemes(true) {\n // ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n如果您使用的是原始 ASCII,那么上述情况都不适合您,您可以简单地使用迭代bytes
器:
for byte in my_str.bytes() {\n // ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n不过,如果您使用 ASCII,那么可以说您根本不应该使用String
/ ,而应该直接使用/ 。&str
Vec<u8>
&[u8]
小智 5
fn main() {
let s = "Rust is a programming language";
for i in s.chars() {
print!("{}", i);
}}
Run Code Online (Sandbox Code Playgroud)
输出:Rust 是一种编程语言
我使用 chars() 方法迭代字符串的每个元素。
归档时间: |
|
查看次数: |
36631 次 |
最近记录: |