Rust 中的字符串是 UTF-8 编码的 Unicode 字符序列。例如,"Rust Programming"
是一个字符串,其中每个字符都是有效的 Unicode 字符。即 "R"
、"u"
、"s"
、"t"
、" "
等等。
在 Rust 中创建字符串
我们可以使用 String::from()
方法创建一个带有默认值的字符串。例如,
// create a string with a default value
let word = String::from("Hello, World!");
在这里,我们创建了一个新字符串并将其赋给 word 变量。我们还提供了默认值 "Hello, World!"
。
注意:字符串在堆内存中分配,并且大小是动态可变的(可调整大小)。因此,字符串的大小在编译时是未知的。
示例:在 Rust 中创建字符串
fn main() {
// string creation using String::from() method
let word = String::from("Hello, World!");
println!("word = {}", word);
}
输出
word = Hello, World!
Rust 中的可变字符串
我们可以通过在变量前使用 mut
关键字来创建 Rust 中的可变字符串。例如,
// mutable string
let mut word = String::from("cat");
我们可以修改这个字符串。
我们来看一个例子:
fn main() {
let mut word = String::from("cat");
println!("original string = {}", word);
// push a new string at the end of the initial string
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!");
// slicing a string
let slice = &word[0..5];
println!("string = {}", word);
println!("slice = {}", slice);
}
输出
string = Hello, World! slice = Hello
这里,&word[0..5]
是对变量 word
中存储的字符串进行切片的表示法,从起始索引 0(包含)到结束索引 5(不包含)。
切片语法中的 &
(和号)表示这是一个字符串引用。它不是实际的数据。
切片也用于访问数组和向量中存储的数据部分。要了解 Rust 中的 Slice,请访问 Rust Slice。
遍历字符串
我们可以使用字符串类型的 chars()
方法来遍历字符串。例如,
fn main() {
let str = String::from("Hello");
// Loop through each character in a string using chars() method
for char in str.chars() {
println!("{}", char);
}
}
输出
H e l l o
在这里,我们使用 chars()
方法遍历所有字符并打印每个字符。
使用 String::new() 创建空字符串
我们可以使用 String::new()
方法创建一个空字符串。例如,
// create an empty string
let mut word = String::new();
然后我们可以使用 push_str()
方法将一个字符串追加到 word 变量。
word.push_str("Hello, World!");
在这里,我们将字符串 "Hello, World!"
推送到空字符串变量 word。
示例:使用 String::new() 创建空字符串
fn main() {
// create an empty string
let mut word = String::new();
println!("original string = {}", word);
// append a string to the word variable
word.push_str("Hello, World!");
println!("changed string = {}", word);
}
输出
original string = changed string = Hello, World!
在这里,我们使用 String::new()
创建一个空字符串,并使用 push_str()
方法将字符串 "Hello, World!"
追加到原始字符串。
常见问题
在 Rust 中,我们可以将字符串分为两种类型:String
和 str
。
字符串
- 是分配在堆数据结构中的一种数据类型。
- 具有固定大小,可以修改。
str
- 是存储在内存中某处的字符串的视图。
- 也称为字符串切片,只能通过指针
&str
来处理。要了解更多信息,请访问 Rust Slice。
根据设计,Rust 不支持字符串索引。如果我们尝试使用索引访问字符,将会收到错误。例如,
fn main() {
let str = "Hello";
println!("First letter {}", str[0]); // ERROR!!!
}