Rust 中的字符串详解


在许多编程语言中,操作字符串是编写应用程序的一个重要方面。以性能和安全性而闻名的 Rust 编程语言也不例外。本文深入探讨了 Rust 中的字符串,包括可以简化您的编码体验的特殊符号和“技巧”。

理解 Rust 中的基本字符串
在最基本的层面上,Rust 中的字符串表示为编码为 UTF-8 字节流的 Unicode 标量值序列。字符串是使用双引号创建的""。

let s = "Hello, World!";

在此代码片段中,s是一个包含文本“Hello, World!”的字符串。

字符串文字和字符串切片
在 Rust 中,字符串文字是一个切片 (&str),它指向程序二进制输出的特定部分——它是只读的,因此是不可变的。这也是字符串文字有时被称为“静态字符串”的原因。

let s: &'static str = "Hello, World!";

这里,s是一个指向字符串“Hello, World!”的字符串切片。

原始字符串
在Rust中,字符串字头前的r表示一个原始字符串。原始字符串忽略了所有的转义字符,并按原样打印字符串。当你想避免在字符串中转义反斜线时,这很有帮助,例如,在正则表达式或文件路径中。

let s = r"C:\Users\YourUser\Documents";

字节串
Rust 也有字节字符串的概念。它们与文本字符串类似,但它们是由字节而不是字符构成的。
您可以通过在字符串文字前添加"b"前缀来创建字节字符串:

let bs: &[u8; 4] = b"test"; // bs is a byte array: [116, 101, 115, 116]

原始字节字符串
原始字节字符串是原始字符串和字节字符串的组合。这种类型的字符串对于包含可能不是有效 UTF-8 的字节序列非常有用。
原始字节字符串是通过在字符串文字前添加前缀“br” 来创建的。

let raw_bs = br"\xFF"; // raw_bs is a byte array: [92, 120, 70, 70]

在原始字符串中转义
如果你需要在一个原始字符串中包含引号,你可以通过在字符串的两边添加额外的符号来实现

let s = r#"This string contains "quotes"."#;

多行原始字符串
原始字符串可以是多行的。字符串的内容从不只包含# 的第一行开始。

let s = r####"
This string contains
"quotes".
It also spans multiple lines.
"####;

统一码Unicode 字符串
Rust 中的字符串文字还可以包含任何有效的 Unicode 字符。

let s = "Hello, 世界!";

Escapes转义字符
常规(非原始)字符串文字支持多种转义序列:

\\ 反斜杠
\" 双引号
\n 新行
\r 回车符
\t Tab
\0 null

还有 Unicode 转义:

  • \u{7FFF} Unicode 字符(可变长度,最多 6 位数字)
  • \u{1F600}统一表情符号

结论
总之,Rust 提供了强大而灵活的工具来处理字符串。从原始字符串和字节字符串到 Unicode 和转义序列,