龙空技术网

Rust通用集合类型-字符串

是啊七呀 104

前言:

目前我们对“字符串类型的基本操作”可能比较关心,咱们都想要知道一些“字符串类型的基本操作”的相关资讯。那么小编在网上汇集了一些有关“字符串类型的基本操作””的相关文章,希望小伙伴们能喜欢,朋友们一起来学习一下吧!

前言

在上一篇文章中我们简单的介绍了Rust当中的动态数组以及其相关的操作。在这一篇文章里我们将来学习一下Rust中的字符串,因为字符串本身就是基于字节的集合,并通过功能性的方法将字节解析为文本。本节还会简单的介绍一些常见的基于String的集合类型的操作,比如创建,更新及访问等。好了开始进入今天的内容吧!

什么是字符串

Rust在语言核心部分只有一种字符串类型,那就是字符串切片str,它通常以借用的形式(&str)出现。字符串切片是一些指向存储在别处的UTF-8编码字符串的引用。String类型被定义在了Rust标准库中而没有被内置在语言的核心部分。当Rust开发者们提到“字符串”时,他们通常指的是String与字符串切片&str这两种类型,而不仅仅只是其中的一种。

字符串的常见操作创建字符串

我们可以使用new方法或to_string方法来创建一个字符串。对那些实现了Displaytrait的类型调用to_string方法,如同字符串字面量一样。具体操作如下所示:

fn main() {    let s = String::new();        let s1 = "hello".to_string();}

2. 更新字符串

更新一个字符串有多种方法,例如,push,push_str,加号(+)和format!()宏等。

fn main() {    let mut s = String::new();        s.push_str("hello world");        let s1 = "hello".to_string();        println!("the s is {}", s);    println!("the s1 is {}", s1);        let s2 = String::from("python ");        let s3 = String::from("vs golang");        let s4 = s2 + &s3; // 注意这里的s2已经被移动且再也不能被使用了        // println!("the s2 = {}", s2); // 这里打开的话会编译通过    println!("the s3 = {}", s3);    println!("the s4 = {}", s4);        let mut s5 = "hello".to_string();    s5.push('?'); // push方法接收单个字符作为参数,并将它添加到String中        let s6 = format!("{}", s5);        println!("the s5 = {}", s5);    println!("the s6 = {:?}", s6);    }

3. 字符串索引

在其他编程语言中,我们往往可以通过索引的方式来引用字符串中每一个单独的字符。但是在Rust中如果想要尝试使用同样的索引语法去访问String中的内容,则会收到一个错误提示。这与它的内部布局有关,String实际上是一个基于Vec<u8>的封装类型。无法使用索引的另一个原因是索引操作的复杂度往往会被预期为常数时间(O(1))。但在String中,我们无法保障这种做法的性能,因为Rust必须要遍历从头至索引位置的整个内容来确定究竟有多少合法的字符存在。

fn main() {    let s = String::from("hello world").len();        println!("the s length = {}", s);}

4. 字符串切片

Rust中为了明确表明需要一个字符串切片,我们需要在索引的[]中填写范围来指定所需的字节内容,而不是在[]中使用单个数字进行索引。这个跟python是类似的,具体如下所示:

fn main() {    let s = String::from("hello world");        println!("the s length = {}", &s[0..6]);}

5. 遍历字符串

如果我们想要对每一个Unicode标量值都进行处理,那么最好的办法就是使用chars方法。具体如下所示:

fn main() {    let s = String::from("hello world");        for item in s.chars() {        println!("item = {}", item);    }}
小结

字符串实际上还是挺复杂的,在不同的编程语言里都会做出不同的设计抉择,来确定将何种程度的复杂性展现给程序员。

标签: #字符串类型的基本操作