跳至主要內容

Rust字符类型

LincZero大约 4 分钟

Rust字符类型

两种字符串

Rust 语言提供了两种字符串

  • Rust 核心内置的数据类型 &str。字符串字面量,底层实现是 切片 。
  • Rust 标准库中的一个 公开 pub 结构体。字符串对象 String

类型 - 字符串字面量 (内置)

字符串字面量 (字符串切片)

字符串字面量的核心代码可以在模块 std::str 中找到。Rust 中的字符串字面量被称之为 字符串切片。因为它的底层实现是 切片。

let lesson: &str = "Go语言微服务架构核心22讲";

字面量 &str 就是在 编译时 就知道其值的字符串类型,它也是字符的集合,被硬编码赋值给一个变量。

字符串字面量模式是 静态 的,所以,字符串字面量从创建时开始会一直保存到程序结束。

类型 - 字符串对象 (标准库)

特点

字符串对象并不是 Rust 核心内置的数据类型,它只是标准库中的一个 公开 pub 的结构体。

pub struct String

字符串对象是使用 UTF-8 作为底层数据编码格式,长度可变的集合。

字符串对象在 heap 中分配,可以在运行时提供字符串值以及相应的操作方法。

字符串对象常用方法

new() 创建

创建一个新的字符串对象

新建字符串对象

String::new() 	// 创建一个新的空字符串,它是静态方法。
String::from() 	// 从具体的字符串字面量创建字符串对象。

代码示例

let s1 = String::new();
let s2 = String::from("面向加薪学习");

println!("s1:{}, s1-len:{}", s1, s1.len()); // 输出 s1:, s1-len:0
println!("s2:{}, s2-len:{}", s2, s2.len()); // 输出 s2:面向加薪学习, s2-len:18

push_str() 追加

在字符串末尾追加字符串

let mut s3 = String::new();
s3.push_str("Go语言极简一本通");
println!("{}",s3); 	// 输出 Go语言极简一本通

push() 追加

是在原字符上追加字符,而不是返回一个新的字符串

let mut s3 = String::new();
s3.push('O');
s3.push('K');
println!("{}",s3);	// 输出 OK

replace() 替换

指定字符串子串替换成另一个字符串

let s4 = String::from("面向加薪学习");
let result = s4.replace("面向加薪学习", "www.go-edu.cn");
println!("{}",result);	// 输出 www.go-edu.cn

len() 获取长度

返回字符串中的 总字节数。该方法会统计包括 制表符 \t、空格 ``、回车 \r、换行 \n 和回车换行 \r\n 等等。

let s5 = String::from("面向加薪学习 www.go-edu.cn\n");
println!("length is {}", s5.len());	// 输出 33

to_string() 字面量转字符串对象

将字符串转换为字符串对象,方便以后可以有更多的操作。

let s6 = "从0到Go语言微服务架构师".to_string();
println!("{}", s6);	// 输出 从0到Go语言微服务架构师

as_str() 字符串对象转字面量

返回一个字符串对象的 字符串 字面量。

fn show_name(name:&str){
    println!("充电科目:{}", name);
}

let s7 = String::from("Go语言微服务架构核心22讲");
show_name(s7.as_str()); 	// 输出 充电科目:Go语言微服务架构核心22讲

trim() 去除空白符

去除字符串头尾的空白符。空白符是指 制表符 \t、空格 ``、回车 \r、换行 \n 和回车换行 \r\n 等等。

let s8 = " \tGo语言极简一本通\tGo语言微服务架构核心22讲 \r\n从0到Go语言微服务架构师\r\n     ";
println!("length is {}", s8.len());			// 输出 length is 103
println!("length is {}", s8.trim().len());	// 输出 length is 94
println!("s8:{}",s8);
// 输出
s8:     Go语言极简一本通        Go语言微服务架构核心22讲
从0Go语言微服务架构师

split() 分隔

将字符串根据某些指定的 字符串子串 分割,返回分割后的字符串子串组成的切片上的迭代器。

let s9 = "Go语言极简一本通、Go语言微服务架构核心22讲、从0到Go语言微服务架构师";
for item in s9.split('、'){
   println!("充电科目: {}",item);
}
// 输出
// 充电科目: Go语言极简一本通
// 充电科目: Go语言微服务架构核心22讲
// 充电科目: 从0到Go语言微服务架构师

chars() 转字符数组

将一个字符串打散为所有字符组成的数组

let s10 = "从0到Go语言微服务架构师";
for c in s10.chars(){
   println!("字符: {}",c);
}
// 输出
字符: 从
字符: 0
字符: 到
字符: G
字符: o
字符: 语
字符: 言
字符: 微
字符: 服
字符: 务
字符: 架
字符: 构
字符:

+ 字符串拼接

内部实现是重写了 add() 方法。

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

返回新的字符串对象。

let s11 = "Go语言极简一本通".to_string();
let s12 = " 欢喜".to_string();
let result2 = s11 + &s12;
println!("{}",result2);
// 输出 Go语言极简一本通 欢喜