我查看了Rust docs for String,但找不到提取子字符串的方法.

有没有像JavaScript的Rust substr这样的方法?如果没有,你将如何实施?

str.substr(start[, length])

最接近的可能是slice_unchecked,但它使用字节偏移量而不是字符索引,并标记为unsafe.

推荐答案

对于字符,可以使用s.chars().skip(pos).take(len):

fn main() {
    let s = "Hello, world!";
    let ss: String = s.chars().skip(7).take(5).collect();
    println!("{}", ss);
}

不过要注意Unicode字符的定义.

对于字节,可以使用切片语法:

fn main() {
    let s = b"Hello, world!";
    let ss = &s[7..12];
    println!("{:?}", ss);
}

Rust相关问答推荐

捕获Rust因C++异常而产生panic

如何优化小型固定大小数组中的搜索?

当两者都有效时,为什么Rust编译器建议添加';&;而不是';*';?

值为可变对象的不可变HashMap

如何正确地将App handler传递给Tauri中的其他模块?

S,一般性状和联想型性状有什么不同?

为什么RefCell没有与常规引用相同的作用域?

为什么AsyncRead在Box上的实现有一个Unpin特征绑定?

如何执行数组文字的编译时串联?

在 Rust 中,为什么 10 个字符的字符串的 size_of_val() 返回 24 个字节?

返回迭代器考虑静态生命周期类型

Rust 1.70 中未找到 Trait 实现

Rust:`sort_by` 多个条件,冗长的模式匹配

有没有办法通过命令获取 Rust crate 的可安装版本列表?

为什么我不能克隆可克隆构造函数的Vec?

以 `static` 为前缀的闭包是什么意思?我什么时候使用它?

我的 Axum 处理程序无法编译:未实现 IntoResponse 特征

在 Rust 中枚举字符串的最佳方式? (字符()与 as_bytes())

如何在没有 `make_contiguous()` 的情况下对 VecDeque 进行排序或反转?

相互调用的递归异步函数:检测到循环