Rust字符类型
大约 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讲
从0到Go语言微服务架构师
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语言极简一本通 欢喜