📅  最后修改于: 2023-12-03 15:04:57.764000             🧑  作者: Mango
在 Rust 中,字符串是 Unicode 编码的。在字符串字面量中,可以使用双引号或单引号,但 Rust 推荐使用双引号。
可以使用字面量来创建字符串,也可以使用 String
类型来创建字符串。
let string_literal = "Hello, world!";
let mut string = String::new();
可以使用 to_string
或 to_owned
方法将任何实现了 ToString
trait 的类型转换成字符串。
let s1 = 5.to_string();
let s2 = String::from("hello");
let s3 = "world".to_owned();
可以使用 +
运算符或 format!
宏来连接字符串。
let s1 = "hello".to_string();
let s2 = "world".to_string();
let s3 = s1 + ", " + &s2;
let s4 = format!("{} {}!", s1, s2);
需要注意,使用 +
运算符连接字符串时,需将其中一个操作数的所有权转移给另一个操作数。
可以使用 []
操作符获取一个字符串的子串。
let s = "hello, world!";
let hello = &s[0..5];
let world = &s[7..12];
let exclamation = &s[13..14];
需要注意,切片下标不能越界,否则会导致程序崩溃。
可以使用 chars
方法获取一个字符串的字符迭代器,也可以使用 bytes
方法获取一个字符串的字节迭代器。
let s = "hello, 世界!";
for c in s.chars() {
println!("{}", c);
}
for b in s.bytes() {
println!("{}", b);
}
需要注意,由于 Rust 中的字符采用的是 Unicode 编码,因此一个字符可能会占用多个字节。
Rust 提供了多个方法来比较两个字符串是否相等,包括 ==
运算符、eq
方法和 cmp
方法。
let s1 = String::from("hello");
let s2 = String::from("world");
assert!(s1 == "hello");
assert!(s1.eq("hello"));
assert!(s1.cmp("hello") == std::cmp::Ordering::Equal);
需要注意,str
类型和 String
类型无法直接比较。可以将一个 str
类型转换成 String
类型,然后再进行比较。
可以使用 len
方法获取一个字符串的字符数或字节数。
let s = "hello, 世界!";
assert!(s.len() == 13);
assert!(s.chars().count() == 9);
需要注意,由于 Rust 中的字符采用的是 Unicode 编码,因此一个字符可能会占用多个字节。因此,获取字符串长度时应该根据实际情况选择计算字节数还是字符数。
可以使用 parse
方法将一个字符串转换成其它类型的值。
let s1 = "42".parse::<i32>().unwrap();
let s2 = "3.14".parse::<f64>().unwrap();
需要注意,如果字符串无法转换成目标类型,则会导致程序崩溃。因此,在使用 parse
方法时应该使用 unwrap
方法来处理可能的错误。