Rust中 &str 和 String 有和区别?如何转换?
在Rust中,字符串主要有两种类型:&str和String。
&str:在Rust中称为字符串切片(string slice)。它是对一段内存的引用,这段内存包含了一个有效的UTF-8字符串。字符串切片是不可变的,也就是说你不能修改它们包含的字符串。字符串切片通常用于函数参数,表示函数可以接受任何类型的字符串。
&str是对现有字符串的引用,不论这个字符串是String还是字符串字面量
String:这是一个在堆上分配的、可增长的、UTF-8编码的字符串类型。String类型的字符串可以被修改,比如添加新的字符或者删除已有的字符。
在用法上,&str和String有一些重要的区别。对于String类型的字符串,你可以改变它的内容和长度。但对于&str类型的字符串切片,你只能读取它,不能改变它。
在Rust中,你可以使用多种方式在&str和String之间进行转换:
你可以使用
&运算符将String转换为&str。例如:1
2let s: String = "hello".to_string();
let t: &str = &s;你可以使用
to_string方法或者String::from函数将&str转换为String。例如:1
2
3
4let s: &str = "hello";
let t: String = s.to_string();
// 或者
let u: String = String::from(s);
请注意,虽然这两种类型都用于处理字符串,但它们在内存管理和功能上有重要的区别,所以在编写Rust代码时,你需要根据具体的需求来选择使用哪一种类型。
1 | fn main() { |
1 | 第一个str_object1值为:Hello,第二个为:cuishuang,第三个为:cuishuang |
&str和String能否进行迭代?会得到什么
在 Rust 中,&str 和 String 都可以进行迭代操作。它们都实现了 Iterator trait,因此可以使用迭代器方法进行遍历和处理字符串的每个字符。
当你迭代一个 &str 或 String 对象时,你会得到一个迭代器,它会产生字符串中的每个字符作为迭代序列的一部分。迭代器提供了一系列方法,如 map、filter、collect 等,可以在迭代过程中对字符进行处理和转换。
以下是一个示例,演示了如何迭代 &str 和 String:
1 | fn main() { |
在上面的示例中,我们使用 chars() 方法获取一个迭代器,然后使用 for 循环遍历每个字符,并打印出字符。
对于 &str 和 String 的迭代,得到的是字符,而不是字节。如果你需要以字节为单位进行迭代,可以使用 bytes() 方法来替代 chars() 方法。
需要注意的是,迭代字符串时,字符的处理可能会受到 Unicode 编码和字符集的影响。因此,如果你需要处理复杂的字符操作,如字符的宽度、组合、分割等,建议使用 Rust 的 Unicode 相关库,如 unicode-segmentation、unicode-width 等,以确保正确处理字符的特殊情况。
1 | 下面迭代&str |
迭代字节:
1 | fn main() { |
输出:
1 | 下面迭代&str |
提供run和debug功能的是rust-anlyler这个插件,而不是什么code-runner
原文链接: https://dashen.tech/2020/09/04/Rust中-str和String的区别与转换/
版权声明: 转载请注明出处.