【发布时间】:2019-01-29 16:01:43
【问题描述】:
我有一段包含不同字节长度字符的文本。
let text = "Hello привет";
我需要获取给定开始(包含)和结束(排除)字符索引的字符串的一部分。我试过这个
let slice = &text[start..end];
并得到以下错误
thread 'main' panicked at 'byte index 7 is not a char boundary; it is inside 'п' (bytes 6..8) of `Hello привет`'
我想这是因为西里尔字母是多字节的,[..] 表示法使用 byte 索引来获取字符。如果我想使用 character 索引进行切片,我可以使用什么,就像我在 Python 中所做的那样:
slice = text[start:end]?
我知道我可以使用 chars() 迭代器并手动遍历所需的子字符串,但有更简洁的方法吗?
【问题讨论】:
-
我认为
chars()是去这里的方式:text.chars().take(end).skip(start) -
@TimDiekmann 如果 API 需要,我如何将
Take<Chars>转换为&str? -
您应该致电
collect()。看到这个问题stackoverflow.com/questions/37157926/… -
@ozkriff
collect()将导致String,而不是&str。这就是为什么我没有将此标记为与您的链接问题重复。