26_字符串表示形式和切割

1. 概述

如果按索引语法访问String的某个部分,会报错,如下示例代码

Rust 复制代码
fn main() {
    let s1 = String::from("hello");
    // 以下代码将会报错
    let h = s1[0];
}

Rust的字符串不支持索引语法访问

2. String类型的内部表示

string是Vec<u8>的包装。Rust有三种看待字符串的方式,分别是:字节(Bytes)、Scalar Values(Unicode标量值)、Grapheme Cluster(字形簇)。

Rust不允许对String进行索引的最后一个原因:索引操作应消耗一个常量时间 O(1),而String无法保证该时间,因为rust需要遍历所有内容,来确定有多少个合法的字符。

3. 切割string

可以使用[]和一个范围来创建字符串的切片,如下示例代码

Rust 复制代码
fn main() {
    let hello = "小明在学习";
    let s = &hello[0..6];

    print!("{}", s)
}

我们切割了6个字节,此时输出的中文字符串是小明,代表一个中文字符占用了3个字节。在字符串切割时,必须谨慎,比如某种语言的每个字符占用2个字节,那切割的位置索引必须整除2。如果我们切割的位置不在字符的边界,程序运行时将会产生panic。也就是说我们在切割字符串的时候,必须验证字符的边界来切割。

4. 遍历字符串的方法

4.1 获得字节

可以使用bytes()方法将字符串按单个字节的方式进行拆分。如下示例代码

Rust 复制代码
fn main() {
    let w = "小明在学习";
    
    for b in w.bytes() {
        println!("{}", b)
    }
}

4.2 获得标量值

可以使用chars()方法将字符串按单个标量值的方式进行拆分。如下示例代码

rust 复制代码
fn main() {
    let w = "小明在学习";
    
    for c in w.chars() {
        println!("{}", c)
    }
}

4.3 获取字形簇

对于字形簇,很复杂,标准库未提供相关接口,如果想快速获取字符串的字形簇,我们可以通过调用三方crate来实现

相关推荐
Highcharts.js2 小时前
缺失数据可视化图表开发实战|Highcharts创建人员出生统计面积图表示例
开发语言·前端·javascript·信息可视化·highcharts·图表开发
LaughingZhu8 小时前
Product Hunt 每日热榜 | 2026-05-21
前端·人工智能·经验分享·chatgpt·html
怕浪猫8 小时前
Electron 开发实战(一):从零入门核心基础与环境搭建
前端·electron·ai编程
小鹏linux9 小时前
Ubuntu 22.04 部署开源免费具有精美现代web页面的Casdoor账号管理系统
linux·前端·ubuntu·开源·堡垒机
前端若水10 小时前
会话管理:创建、切换、删除对话历史
前端·人工智能·python·react.js
Bigger10 小时前
mini-cc:一个轻量级 AI 编程助手的诞生
前端·ai编程·claude
涵涵(互关)10 小时前
Naive-ui树型选择器只显示根节点
前端·ui·vue
BY组态11 小时前
Ricon组态系统最佳实践:从零开始构建物联网监控平台
前端·物联网·iot·web组态·组态
BY组态11 小时前
Ricon组态系统vs传统组态软件:为什么选择新一代Web组态平台
前端·物联网·iot·web组态·组态
SoaringHeart11 小时前
Flutter进阶:OverlayEntry 插入图层管理器 NOverlayZIndexManager
前端·flutter