LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

Rust 字符串的基本操作

admin
2024年12月28日 7:57 本文热度 168

Rust 核心语言只有一种字符串类型,那就是字符串切片 str,它的借用形式更常见 &str

String 类型,不属于核心语言,而是由 Rust 标准库提供。它是一种长度可变、内容可变、拥有所有权的 UTF-8 编码字符串类型。

创建新字符串

String 其实是矢量类型的封装,矢量类型 Vec<T> 的许多操作在 String 上都能找到。比如,创建空白字符串的 new() 方法。

如果想使用现成的字符串初始化 String,可以使用 to_string() 方法。所有实现 Display 特征的类型都有这个方法,比如字符串字面量。

还可以使用 String::from() 创建字符串。

因为字符串基于 UTF-8,你可以在其中存储各国语言,甚至包括 emoji。

更新字符串

使用 push_str(string) 向字符串尾部添加新字符串。参数是字符串切片类型 &str,因此不会占有参数的所有权。

使用 push(ch) 向字符串尾部添加单个字符:

拼接两个 String,可以使用加号 +。加号运算符会调用 add() 函数,其签名如下:

fn add(self, s: &str) -> String {...}

因此,使用 + 执行完拼接操作,原字符串将失去所有权:

当拼接多个字符串,代码写起来很不方便:

此时,使用 format! 宏会更方便。format! 宏的用法 println! 宏的用法类似,只不过不是向终端打印信息,而是返回 String 类型的值。

format! 宏的可读性更好,并且它不会抢夺字符串的所有权,之后可以继续使用原来的字符串。

字符串索引

在其他编程语言,访问字符串索引是个常见操作。但是,如果你在 Rust 中进行此类操作,会得到一个错误:

之所以 Rust 禁止对字符串进行索引操作,是因为 UTF-8 是一种变长编码方案,有的字符使用 1 个字节表示,有的字符则需要 2 个字节甚至更多。因此,索引位置和字符并非一一对应。

为了避免含糊不清,防止可能带来的问题,Rust 干脆禁止在字符串上使用索引值。

Rust 禁用字符串的另一个原因时,索引操作的时间复杂度应当是常量时间O(1)。但这在 UTF-8 中难以实现,因为每次它都需要从头开始遍历,才能发现当前位置属于哪个字符。

字符串切片

如果你确实想截取字符串的一部分,必须要更明确的告知 Rust 编译器,你期望截取的数据类型,是字节、字符、还是图元簇?

比如,你可以使用区间语法 [a..b] 截取特定范围内的字节序列。

如果你截取的字节序列不是一个完整的 UTF-8 编码,Rust 会 panic 退出。使用字符串切片务必小心。

遍历字符串

使用 for 循环字符串时,务必明确你的遍历元素类型。

使用 chars() 返回一个遍历字符的迭代器。

如果想遍历字符串的所有字节,使用 bytes() 方法:

如果你要遍历图元簇,Rust 标准库不提供这种功能,需要去 crates.io 自行解决。

相关阅读

  1. 一文读懂字符编码

  2. Rust 的矢量:可变长的数组

  3. Rust 的切片类型


参考资料

Storing UTF-8 Encoding Text with Strings

https://doc.rust-lang.org/stable/book/ch08-02-strings.html


该文章在 2024/12/28 11:54:43 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved