Rust基础拾遗--字符串和I/O


前言

   通过Rust程序设计-第二版笔记的形式对Rust相关重点知识进行汇总,读者通读此系列文章就可以轻松的把该语言基础捡起来。


1.字符串与文本

简介

本章包括如下内容。

  • 提供一些 Unicode 背景知识来帮助你理解标准库的设计。
  • 讲解表示单个 Unicode 码点的 char 类型。
  • 讲解 String 类型和 str 类型,二者是表示拥有和借用的 Unicode 字符序列。它们有各种各样的方法来构建、搜索、修改和迭代其内容。
  • 介绍 Rust 的字符串格式化工具,比如 println! 宏和 format! 宏。你可以编写自己的宏来处理格式化字符串,并扩展它们以支持自己的类型。
  • 概述 Rust 对正则表达式的支持。
  • 为什么 Unicode 的规范化很重要?如何在 Rust 中对其进行规范化?

1.1 一些Unicode背景知识 358
1.1.2 UTF-8编码 359
Rust 的 String 类型和 str 类型表示使用了 UTF-8 编码形式的文本。

UTF-8 会将字符编码为 1~4 字节的序列

1.2 字符(char) 361
Rust 的 char 类型是一个包含 Unicode 码点的 32 位值。char 保证会落在 0~ 0xd7ff 或 0xe000~ 0x10ffff 范围内,所有用于创建和操作 char 值的方法都会确保此规则永远成立。char 类型实现了 Copy 和 Clone,以及用于比较、哈希和格式化的所有常用特型。

字符串切片可以使用 slice.chars() 生成针对其字符的迭代器:

1.2.1 字符分类
1.2.2 处理数字
1.2.3 字符大小写转换
1.2.4 与整数之间的转换

1.3 String与str

1.3.1 创建字符串值

1.3.2 简单探查
1.3.3 追加文本与插入文本
1.3.4 移除文本与替换文本
1.3.5 搜索与迭代的约定
1.3.6 搜索文本的模式
1.3.7 搜索与替换
1.3.8 遍历文本
1.3.9 修剪
1.3.10 字符串的大小写转换
1.3.11 从字符串中解析出其他类型
1.3.12 将其他类型转换为字符串
1.3.13 借用其他类似文本的类型
1.3.14 以UTF-8格式访问文本
1.3.15 从UTF-8数据生成文本
1.3.16 推迟分配
1.3.17 把字符串当作泛型集合
1.4 格式化各种值
1.4.1 格式化文本值
1.4.2 格式化数值
1.4.3 格式化其他类型
1.4.4 格式化值以进行调试
1.4.5 格式化指针以进行调试
1.4.6 按索引或名称引用参数
1.4.7 动态宽度与动态精度
1.4.8 格式化自己的类型
1.4.9 在自己的代码中使用格式化语言
1.5 正则表达式
外部的 regex crate 是 Rust 的官方正则表达式库,它提供了通常的搜索函数和匹配函数。

1.5.1 Regex的基本用法
Regex 值表示已经解析好的正则表达式。Regex::new 构造函数会尝试将 &str 解析为正则表达式,并返回一个 Result:

use regex::Regex;

// 注意,使用原始字符串语法r"..."是为了避免一大堆反斜杠
let semver = Regex::new(r"(\d+)\.(\d+)\.(\d+)(-[-.[:alnum:]]*)?")?;

// 简单搜索,返回布尔型结果
let haystack = r#"regex = "0.2.5""#;
assert!(semver.is_match(haystack));

Regex::captures 方法会在字符串中搜索第一个匹配项并返回一个 regex::Captures 值,其中包含表达式中每个组的匹配信息:

// 可以检索各个捕获组:
let captures = semver.captures(haystack)
 .ok_or("semver regex should have matched")?;
assert_eq!(&captures[0], "0.2.5");
assert_eq!(&captures[1], "0");
assert_eq!(&captures[2], "2");
assert_eq!(&captures[3], "5");

1.5.2 惰性构建正则表达式值

Regex::new 构造函数的开销可能很高:在速度较快的开发机器上为 1200 个字符的正则表达式构造一个 Regex 会花费差不多 1 毫秒时间,即使是一个微不足道的表达式也要花费几微秒时间。最好让 Regex 构造远离繁重的计算循环,这就意味着应该只构建一次 Regex,然后重复使用它。

lazy_static crate 提供了一种在首次使用时惰性构造静态值的好办法。

2.输入与输出

2.1 读取器与写入器
2.1.1 读取器
2.1.2 缓冲读取器
2.1.3 读取行
2.1.4 收集行
2.1.5 写入器
2.1.6 文件
2.1.7 寻址
2.1.8 其他读取器与写入器类型
2.1.9 二进制数据、压缩和序列化
2.2 文件与目录
2.2.1 OsStr与Path
2.2.2 Path与PathBuf的方法
2.2.3 访问文件系统的函数
2.2.4 读取目录
2.2.5 特定于平台的特性

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值