rust语言字符串笔记

每种语言都免不了和字符串打交道,rust也不例外。由于rust本身的一些特性,字符串的使用和其他语言有很大的不同。

从最简单的单个字符说起-char

char类型可以简单的定义单字符变量

1
2
let c = 'a';
let d = '好'; //这个将会报错

这样就简单的定义了一个char类型。为什么不能用中文呢?其实不只是中文,非英文之外的语言都会出现问题。rust采用utf8进行字符编码。虽然看起来是一个汉字,但对于机器来说其实是3个字符。

了解一下字符串

char只能定义一个英文或数字等简单字符显然是不够的,使用过程中字符串比这要复杂的多。于是就有了str类型

1
2
let s = "好";
let s2 = "hello";

这样写其实是建立了一个&str类型。他是一个str类型的引用。

1
2
let s1 = String::from("hello");
let s2 = "hello".to_string();

这样就得到了两个String类型的字符串。

既然&str可以转换成String,那能不能反过来呢?答案是可以。使用切片(slice)可以做到。

1
2
let s1 = String::from("hello");
let s2 = &s1[..]

这样s2就是&str类型的变量了。

&str就应该有str类型的数据吧?当然。

  • str 是 Rust 核心语言类型
    • 存放在栈上
    • 不可变更
  • String类型是rust标准公共库提供的一种数据类型,它的功能更完善——它支持字符串的追加、清空等实用的操作。String 和 str 除了同样拥有一个字符开始位置属性和一个字符串长度属性以外还有一个容量(capacity)属性。