📜  Rust – 字符串(1)

📅  最后修改于: 2023-12-03 15:04:57.764000             🧑  作者: Mango

Rust – 字符串

在 Rust 中,字符串是 Unicode 编码的。在字符串字面量中,可以使用双引号或单引号,但 Rust 推荐使用双引号。

创建字符串

可以使用字面量来创建字符串,也可以使用 String 类型来创建字符串。

let string_literal = "Hello, world!";
let mut string = String::new();

可以使用 to_stringto_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 方法来处理可能的错误。