Rust - String
字符串
1、字符串就是基于字节byte的集合
2、能将byte解析为文本
1、字符串是什么
1、Rust的核心语言层面,只有一个字符串类型:字符串切片str(或&str)
2、字符串切片:对存储在其他地方、UTF-8编码的字符串的引用
-字符串字面值:存储在二进制文件中,也是字符串切片
2、String类型
1、来自标准库而不是核心语言
2、它是可增长、可修改、可拥有的
3、它采用的是UTF-8编码
2.1、通常说的字符串是指
1、String和&str(字符串切片)这两种类型
2.2、其他类型的字符串
1、Rust的标准库还包含了很多其他的字符串类型,例如:OsString、OsStr、CString、CStr
- 区别在于:string 和 str 后缀,string是拥有所有权,str后缀指可借用
- 可存储不同编码的文本或在内存中以不同的形式展现
3、创建一个新的字符串(String)
1、很多Vec<T>
的操作都可用于String
2、通过String::new()
函数创建
3、常用的创建方法:使用初始值来创建String
-
to_string()
方法,可用于实现Display trait的类型,包括字符串字面值// 创建字符串 let mut s = String::new(); // 常用的方法 to_string转换 let s = "test"; // 现在是&str类型 let news = s.to_string(); // 通过to_string转换,变成string类型 // 直接使用to_string let s1 = "hello world".to_string(); // 这样直接是string类型 // 使用string::from函数创建 let s2 = String::from("world hello");```
4、更新String
1、pust_str()
方法:把一个字符串切片(&strs)附加到string
- 这个方法不会获取参数的所有权
2、pust()
方法:把单个字符附加到string
5、拼接字符串
1、+号连接
- 前面的值是字符串,后面的值是字符串切片
- 后面如果要继续使用这两个值,前面的值已经不能使用,后面的值因为传的是引用,所以可以继续使用
2、format!
宏:这个不会获取任何字符串的所有权
let ss3 = format!("{}-{}",ss,ss1);
// 拼接字符串
let ss = String::from("hello");
let ss1 = String::from("world");
//let add_ss = ss + &ss1;
//println!("{}",add_ss);
// println!("ss的值:{}",ss); 不能使用这值
println!("ss1的值:{}",ss1);
// format!宏:连接多个字符串
let ss3 = format!("{}-{}",ss,ss1);
6、为什么String类型不能通过索引表示?
1、String类型是不支持通过索引的方式访问,因为string没有实现一个trait
7、内部表示
1、String类型,内部其实是Vec<u8>
组成的
2、Rust有三种看待字符串的方式:
- 字节 .byte方法
- 标量值 .chars方法
- 字形簇 第三方库
3、Rust不允许对String进行索引的最后一个原因
- 索引操作消耗一个常量时间
- 而String无法保证:需要遍历所有内容,来确定有多少个合法的字符。
推荐阅读: