Rust中字符串通常指String
和&str
(字符串切片),他们都采用UTF-8编码。
介绍
字符串
字符串是一组基于Byte的组合,Rust 中 String
内置一些方法,可以操作字符串。
Rust 只有一个字符串类型:字符串切片 str
(通常以 &str 字符串切片引用
使用)
字符串切片
对存储在其他地方、UTF-8 编码的字符串的引用
String 类型
Rust标准库中,提供String
类型,采用 UTF-8 编码,来对字符串进行操作,如增加、修改、拥有等。
其他类型的字符串
Rust 标准库还提供其他类型的字符串,如:OsString、OsStr、CString、CStr,他们可以存储不同编码的文本且在内存中以不同的形式展现
String
创建空字符串
使用 String::new()
let mut s = String::new(); // mutable string
创建初始值的字符串
"xxx".to_string()
String::from("xxx")
let s1 = "hello world!".to_string();
let s2 = String::from("hello world!");
更新 String
push_str()
方法:将一个字符串切片
附加到 Stringpush()
方法:将单个字符
附加到 String+
:拼接字符串,String类型
+ String类型引用
- 使用类似如下签名的方法:
fn add(self, s: &str) -> String {}
format!
拼接多个字符串,format 不取的任何参数的所有权
let mut s1 = String::from("hello world!");
let mut s2 = String::from("foo");
s1.push_str(&s2); // 不获取 s2 的所有权
s1.push('b'); // 附加字符
let s3 = s1 + &s2; // s1 的所有权释放,s2 的所有权保留
let s3 = format!("{}-{}", s1, s2);
String 不支持索引访问
Rust 有三种表示字符串的方法:
- 字节 Byte
- 标量值 Scalar Values
- 字形簇 Grapheme Clusters,最接近字母,标准库不提供对应的方法
String 切割
let hello = "helo world!"; // 注意:一些字符占多个字节,可能报错:panicked at byte index x is not a char boundary
let s = &hello[1..3];
String 遍历
chars()
方法获取标量值bytes()
方法获取字节