如何在Rust中获取UTF-8符号切片?

qkf9rpyu  于 2023-03-18  发布在  其他
关注(0)|答案(2)|浏览(133)

我刚刚开始学习铁 rust ,不能理解如何得到切片。

let word = "Хороший"; // I want to get last two symbols.
// word[word.len()-2..] // I understand that is not working because it is not byte array.

let chars = word.chars();
let v = chars.skip(chars.count() - i).map(|x| x).collect();

// But I don't know how to convert 'v' to &str type and do I need it at all?

rust 中的任务是如何解决的?谢谢!

anauzrmj

anauzrmj1#

您可以使用char_indices获取正确的偏移。(playground)

let word = "Хороший"; // I want to get last two symbols.
let mut chars = word.char_indices();
let index_of_last_two = chars.nth_back(1).unwrap().0; // 1 because 0 is й and 1 is и
let slice_of_last_two = &word[index_of_last_two..];
ibrsph3r

ibrsph3r2#

你不能把v转换成一个&str,它是char的一个拥有的东西(向量?),char是32 b的unicode标量值。
第一次尝试接近成功,但是由于索引的工作方式,word[word.len()-2..]将返回一个str,这是一个 *unsized类型 *,使用起来很复杂。
但是您所要做的就是引用它,如文档中所示。
同样如文件所示,同样如文件所示:

  • 索引字符串以代码单元(UTF8字节)为单位工作,因为й在UTF8(d0b9)中是两个字节,索引为-2将返回它
  • 如果切片的开始或结束位置不是编码代码点的开始位置,它将死机

所以一般来说,直接使用硬编码偏移量进行索引并不是最好的方法,通常更好的方法是模式搜索(匹配和朋友),使用char_indices以便知道在哪里切片,也可以使用charschar_indicesas_str方法。

相关问题