char_indices(); assert_eq!(Some((0, 'g')), char_indices.next()); assert_eq!(Some((1, 'o')), char_indices.next()); assert_eq!(Some((2, 'o')), char_indices.next()); assert_eq!(Some((3, 'd')), char_indices.next()); assert_eq!(Some((4, 'b')), char_indices....
fnmain(){lets=String::from("H你ello好 W世orl界d !");for(index,character)ins.char_indices(){println!("{} {} {}",index,character,character.len_utf8());}}// Output// 字符在字符串中的下标// 字符// 字符以UTF-8表示所需的字节数// 0 H 1// 1 你 3// 4 e 1// 5 l 1// ...
char_indices() { match (ch.is_alphanumeric(), token_start) { (true, None) => token_start = Some(idx), // 每个单词的开始 (false, Some(start)) => { // 每个单词的结尾 res.push((&text[start..idx], start, idx - 1)); token_start = None } _ => {} } } if let Some(...
在本文中可以看到虽然是一个简单的算法例子,利用Rust语言中迭代器以及相关的几个方法chars,all,try_fold,enumerate,try_for_each,char_indices`,可以看到Rust语言的灵活性和强大。
您可以使用char_indices获取正确的偏移。(playground)
fnmain() {lets="夜ser";letmutchars= s.char_indices();forcinchars {println!("{:?}", c); }/* (0, '夜') (3, 's') (4, 'e') (5, 'r') */} 可能有人觉得这么做不太方便,能不能通过索引的方式进行访问呢? fnmain() {lets="夜ser";// s.chars() 表示创建字符迭代器// colle...
解决方案:使用chars方法和迭代器或char_indices方法。 let s = "hello"; let c = s.chars().nth(0).unwrap(); 不合理地分割字符串 let s = "hello world"; let first_word: &str = &s[..5]; // 可能截断了字符边界 解决方案:确保使用字符边界来分割。 let s = "hello world"; let spac...
str.char_indices()\n str.is_char_boundary()\n\n\n 进一步阅读:https://doc.rust-lang.org/book/ch08-02-strings.html\n\n\n 一个办法\n 警告:此代码在代码点级别工作,并且字素簇不可见。\n 从最短到最长:\n use core::iter;\n\npub fn prefixes(s: &str) -> impl Iterator<Item = &st...
在&str 实现Delimiter trait 时,s.find(self) 传入的是一个字符串;而在 &str 实现Delimiter trait 时,s.char_indices().find(|(_, c)| c == self) 传入的是一个闭包(closure)。看一下 str::find() 的函数签名: 代码语言:javascript 复制 pub fn find<'a, P>(&'a self, pat: P) -> Option...
for (offset, c) in haystack.char_indices() { if c == needle { return Some(offset); } } None } 注意当函数找到一个匹配的字符,它并不仅仅返回offset。相反,它返回Some(offset)。Some是一个Option类型的一个变体或一个值构造器。你可以认为它是一个fn<T>(value: T) -> Option<T>类型的函数。同...