rust 基本类型 char, str 和 String

3,532 阅读2分钟

字符串类型

doc.rust-lang.org/std/index.h… 学习中不要忘了 rust 标准

Rust的文本类型主要包含6种:

  • characterrust类型为:char
  • stringrust类型为:&str
  • raw string
  • byte
  • byte string
  • raw byte string

rust 标准库中的 string

  • char 用于存放单个unicode字符,占用 4 字节空间(32bit)。
  • std::str 字符串切片类型(字符串字面量)
  • std::string::String

标准库 std::char

use std::char; 

println!("{}", char::from_u32(0x2764).unwrap()); // ❤

标准库 std::str

str 需与 & 使用 &str 表示切片类型。基本数据类型, 存放于栈中

let a: &str = "this is std::str"; // 切片类型
let b = [12, 23];

println!("{}-{:?}", a, b);

str 切片类型不能直接访问(动态大小类型),必须使用 & 表示引用字符串。下面是一个切片生成另外一个切片

let s: &str = "this slice type string"

let d: &str = &s[..5]

切片字符串的特点:不可变,只能通过应用的方式切片引用部分来使用。当然,类型转换我们回放在后面涉及到。

标准库 std::string::String

String 类型,相对于 str 切片类型就比较灵活。String 可以直接使用,不用使用 use 关键字导入。引用数据类型,存放于堆中:

new 方法创建一个空字符

let empty_str = String::new()

from 方创建一个字符串

const str: String = String::from("this is flex string");

str 与 String 类型之间的相互转换

String -> str 是廉价的

  • 解除引用: 为 String 使用一个 Deref 方法
  • 使用 + 连字符
  • String 类型具有 to_string 方法

str -> String 并不是廉价的

  • 切片类型具有 to_string 方法

所有权 ownership

所有权是 Rust 的特性之一,字符串保存在变量中便有了 所有权。 &str 没有所有权,String 类型具有所有权。

小结

  • 读懂字符串从堆栈开始。
  • 字符串操作大致也是分为两种,字面量的 slice 切片类型(栈),String 的堆类型。
  • 熟悉标准库提供的方法,用于字符串的处理。