Rust 语言提供了两种字符串
- Rust 核心内置的数据类型
&str
,字符串字面量 。 - Rust 标准库中的一个 公开
pub
结构体。字符串对象String
。
字面量&str
字符串字面量的核心代码可以在模块 std::str
中找到。Rust 中的字符串字面量被称之为 字符串切片。因为它的底层实现是 切片。
let lesson="Go语言微服务架构核心22讲";
字面量 &str
就是在 编译时 就知道其值的字符串类型,它也是字符的集合,被硬编码赋值给一个变量。
字符串字面量模式是 静态 的,所以,字符串字面量从创建时开始会一直保存到程序结束。
字符串对象
字符串对象并不是 Rust 核心内置的数据类型,它只是标准库中的一个 公开 pub
的结构体。
pub struct String
字符串对象是使用 UTF-8
作为底层数据编码格式,长度可变的集合。
字符串对象在 堆 heap
中分配,可以在运行时提供字符串值以及相应的操作方法。
新建字符串对象
代码语言:txt复制String::new() //创建一个新的空字符串,它是静态方法。
String::from() //从具体的字符串字面量创建字符串对象。
例子
代码语言:txt复制let s1 = String::new();
println!("s1:{},s1-len:{}",s1,s1.len());
//输出 s1:,s1-len:0
let s2 = String::from("面向加薪学习");
println!("s2:{},s2-len:{}",s2,s2.len());
//输出 s2:面向加薪学习,s2-len:18
字符串对象常用方法
new()
创建一个新的字符串对象
push_str()方法
再字符串末尾追加字符串。
代码语言:txt复制 let mut s3 = String::new();
s3.push_str("Go语言极简一本通");
println!("{}",s3); //输出 Go语言极简一本通
push()方法
是在原字符上追加字符,而不是返回一个新的字符串
代码语言:txt复制s3.push('O');
s3.push('K');
println!("{}",s3);//输出 Go语言极简一本通OK
replace()
指定字符串子串替换成另一个字符串
代码语言:txt复制let s4 = String::from("面向加薪学习");
let result = s4.replace("面向加薪学习","www.go-edu.cn");
println!("{}",result);//输出 www.go-edu.cn
len() 获取长度
返回字符串中的 总字节数。该方法会统计包括 制表符 t
、空格 、回车 r
、换行 n
和回车换行 rn
等等。
let s5 = String::from("面向加薪学习 www.go-edu.cnn");
println!("length is {}",s5.len());//输出 33
to_string()
将字符串转换为字符串对象,方便以后可以有更多的操作。
代码语言:txt复制let s6 = "从0到Go语言微服务架构师".to_string();
println!("{}",s6);//输出 从0到Go语言微服务架构师
as_str()
返回一个字符串对象的 字符串 字面量。
代码语言:txt复制fn show_name(name:&str){
println!("充电科目:{}",name);
}
let s7 = String::from("Go语言微服务架构核心22讲");
show_name(s7.as_str()); //输出 充电科目:Go语言微服务架构核心22讲
trim()
去除字符串头尾的空白符。空白符是指 制表符 t
、空格 、回车 r
、换行 n
和回车换行 rn
等等。
let s8 = " tGo语言极简一本通tGo语言微服务架构核心22讲 rn从0到Go语言微服务架构师rn ";
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()
将字符串根据某些指定的 字符串子串 分割,返回分割后的字符串子串组成的切片上的迭代器。
代码语言:txt复制let s9 = "Go语言极简一本通、Go语言微服务架构核心22讲、从0到Go语言微服务架构师";
for item in s9.split('、'){
println!("充电科目: {}",item);
}
//输出
//充电科目: Go语言极简一本通
//充电科目: Go语言微服务架构核心22讲
//充电科目: 从0到Go语言微服务架构师
chars()
将一个字符串打散为所有字符组成的数组
代码语言:txt复制let s10 = "从0到Go语言微服务架构师";
for c in s10.chars(){
println!("字符: {}",c);
}
//输出
字符: 从
字符: 0
字符: 到
字符: G
字符: o
字符: 语
字符: 言
字符: 微
字符: 服
字符: 务
字符: 架
字符: 构
字符: 师
字符串拼接
的内部实现是重写了 add()
方法。
add(self,&str)->String {
}
返回新的字符串对象。
代码语言:txt复制let s11="Go语言极简一本通".to_string();
let s12 = " 欢喜".to_string();
let result2=s11 &s12;
println!("{}",result2);
//输出 Go语言极简一本通 欢喜