1. eq
方法
- 适用场景:用于判断两个字符串是否完全相等,比较的是字符串的内容。
- 示例:
let s1 = String::from("hello");
let s2 = String::from("hello");
let s3 = String::from("world");
assert!(s1.eq(&s2));
assert!(!s1.eq(&s3));
let str1 = "hello";
assert!(s1.eq(str1));
- 注意:可用于
String
与 String
、String
与 &str
、&str
与 &str
的比较。
2. cmp
方法
- 适用场景:用于对字符串进行排序比较,返回一个
Ordering
枚举值,表示两个字符串的顺序关系(小于、等于、大于)。
- 示例:
let s1 = String::from("abc");
let s2 = String::from("def");
let s3 = String::from("abc");
match s1.cmp(&s2) {
std::cmp::Ordering::Less => println!("s1 is less than s2"),
std::cmp::Ordering::Equal => println!("s1 is equal to s2"),
std::cmp::Ordering::Greater => println!("s1 is greater than s2"),
}
match s1.cmp(&s3) {
std::cmp::Ordering::Less => println!("s1 is less than s3"),
std::cmp::Ordering::Equal => println!("s1 is equal to s3"),
std::cmp::Ordering::Greater => println!("s1 is greater than s3"),
}
- 注意:同样可用于
String
与 String
、String
与 &str
、&str
与 &str
的比较。
3. starts_with
和 ends_with
方法
- 适用场景:
starts_with
用于判断字符串是否以某个前缀开头,ends_with
用于判断字符串是否以某个后缀结尾。
- 示例:
let s = String::from("hello world");
assert!(s.starts_with("hello"));
assert!(s.ends_with("world"));
- 注意:适用于
String
与 &str
(前缀或后缀)的比较,主要关注字符串的起始或结束部分内容。
比较 String
类型和 &str
类型字符串时的注意事项
- 所有权:
String
拥有字符串内容的所有权,是可增长、可改变的堆上数据结构;而 &str
是字符串切片,指向某个字符串内容,不拥有所有权,通常指向 String
或字符串字面量。
- 方法调用:
String
类型和 &str
类型都实现了很多相同的字符串操作方法,但在调用时要注意类型匹配。例如,eq
、cmp
等方法在两种类型上都可用,但如果一个函数要求 &str
参数,传入 String
时需要使用 &
取引用;反之,如果函数要求 String
参数,传入 &str
时可能需要使用 to_string
方法转换为 String
。
- 性能:
&str
操作通常更高效,因为它避免了 String
类型可能涉及的堆内存分配和释放操作。在性能敏感的场景,如果不需要修改字符串,应优先使用 &str
。