Rust字符串
- 字符串基础:Rust 中的字符串是 UTF-8 编码的 Unicode 字符序列,可以使用
String::from()
创建,存储在堆内存中,大小可动态调整。 - 可变性和切片:可使用
mut
关键字创建可变字符串,允许修改内容。字符串切片允许访问字符串的一部分,使用&
符号表示引用。 - 字符串遍历和空字符串创建:使用
chars()
方法可以遍历字符串中的每个字符。String::new()
用于创建空字符串,可以随后通过push_str()
方法追加内容。
Rust 中的字符串是以 UTF-8 编码的 Unicode 字符序列。例如,"Rust Programming"
是一个字符串,其中的每个字符都是有效的 Unicode 字符。比如 "R"
、"u"
、"s"
、"t"
、" "
等等。
在 Rust 中创建字符串
我们可以使用 String::from()
方法创建一个具有默认值的字符串。例如,
// 创建一个具有默认值的字符串
let word = String::from("Hello, World!");
在这里,我们创建了一个新的字符串,并将其赋值给变量 word
。我们还提供了一个默认值 "Hello, World!"
。
注意: 字符串在堆内存中分配,大小是动态的(可调整大小的)。因此,字符串的大小在编译时是未知的。
示例:在 Rust 中创建字符串
fn main() {
// 使用 String::from() 方法创建字符串
let word = String::from("Hello, World!");
println!("word = {}", word);
}
输出
word = Hello, World!
可变字符串在 Rust 中
我们可以通过在变量赋值前使用 mut
关键字来在 Rust 中创建一个可变字符串。例如,
// 可变字符串
let mut word = String::from("cat");
我们可以对这个字符串进行更改。
让我们看一个例子,
fn main() {
let mut word = String::from("cat");
println!("original string = {}", word);
// 在原始字符串的末尾添加新字符串
word.push_str(" dog");
println!("changed string = {}", word);
}
输出
original string = cat
changed string = cat dog
在这里,我们创建了一个可变变量 word
,它保存了字符串 "cat"
。然后我们使用 word.push_str(" dog");
在原始字符串的末尾添加了一个新字符串。
在 Rust 中对字符串进行切片
我们可以在 Rust 中对字符串进行切片,以引用字符串的一部分。字符串切片允许我们引用字符串的一部分(一段)。例如,
fn main() {
let word = String::from("Hello, World!");
// 切片一个字符串
let slice = &word[0..5];
println!("string = {}", word);
println!("slice = {}", slice);
}
输出
string = Hello, World!
slice = Hello
这里,&word[0..5]
是切 片字符串的表示法,用于引用变量 word
中存储的字符串,从起始索引 0(包含)到结束索引 5(不包含)。
切片语法中的 &
(和号)表示这是一个字符串引用。它不是实际数据。
切片也用于访问存储在数组和向量中的数据部分。要了解更多关于 Rust 中的切片,请访问 Rust 切片。
遍历字符串
我们可以使用字符串类型的 chars()
方法遍历一个字符串。例如,
fn main() {
let str = String::from("Hello");
// 使用 chars() 方法遍历字符串中的每个字符
for char in str.chars() {
println!("{}", char);
}
}
输出
H
e
l
l
o
在这里,我们使用 chars()
方法遍历所有字符,并打印每个字符。
使用 String::new() 创建空字符串
我们可以使用 String::new()
方法创建一个空字符串。例如,
// 创建一个空字符串
let mut word = String::new();
我们可以使用 push_str()
方法将字符串附加到 word
变量上。
word.push_str("Hello, World!");
在这里,我们将字符串 "Hello, World!"
推入空字符串变量 word
。
示例:使用 String::new() 创建空字符串
fn main() {
// 创建一个空字符串
let mut word = String::new();
println!("原始字符串 = {}", word);
// 将字符串附加到 word 变量上
word.push_str("Hello, World!");
println!("更改后的字符串 = {}", word);
}
输出
原始字符串 =
更改后的字符串 = Hello, World!
在这里,我们使用 String::new()
创建一个空字 符串,并使用 push_str()
方法将字符串 "Hello, World!"
附加到原始字符串上。
常见问题
Rust 中 String 和 str 有什么区别?
在 Rust 中,我们可以将字符串分为两种类型:String
和 str
。
String
- 是一种在堆数据结构中分配内存的数据类型。
- 具有固定大小且可修改。
str
- 是存储在内存中某处的字符串的视图。
- 也被称为字符串切片,只能使用指针
&str
处理。要了解更多,请访问 Rust 切片。
Rust 支持字符串索引吗?
根据设计,Rust 不支持字符串索引。如果我们尝试使用索引访问字符,将会得到错误。例如,
fn main() {
let str = "Hello";
println!("第一个字母 {}", str[0]); // 错误!!!
}