每种语言都免不了和字符串打交道,rust也不例外。由于rust本身的一些特性,字符串的使用和其他语言有很大的不同。
从最简单的单个字符说起-char
char
类型可以简单的定义单字符变量
1 | let c = 'a'; |
这样就简单的定义了一个char
类型。为什么不能用中文呢?其实不只是中文,非英文之外的语言都会出现问题。rust采用utf8进行字符编码。好
虽然看起来是一个汉字,但对于机器来说其实是3个字符。
了解一下字符串
char只能定义一个英文或数字等简单字符显然是不够的,使用过程中字符串比这要复杂的多。于是就有了str
类型
1 | let s = "好"; |
这样写其实是建立了一个&str
类型。他是一个str
类型的引用。
1 | let s1 = String::from("hello"); |
这样就得到了两个String
类型的字符串。
既然&str
可以转换成String
,那能不能反过来呢?答案是可以。使用切片(slice)可以做到。
1 | let s1 = String::from("hello"); |
这样s2就是&str
类型的变量了。
有&str
就应该有str
类型的数据吧?当然。
str
是 Rust 核心语言类型- 存放在栈上
- 不可变更
String
类型是rust标准公共库提供的一种数据类型,它的功能更完善——它支持字符串的追加、清空等实用的操作。String 和 str 除了同样拥有一个字符开始位置属性和一个字符串长度属性以外还有一个容量(capacity)属性。