Rust 字符串基本使用教程及代码演示

news/2024/12/23 6:18:00/

文章目录

  • 一、基本使用教程
  • 二、代码演示
    • 1、代码演示
    • 2、执行结果

一、基本使用教程

在Rust中,字符串是编程中非常基础且重要的部分。Rust提供了两种主要的字符串类型:String&str。本教程将带你了解Rust中字符串的基本概念和操作。

1、字符串类型

String

String是一个可增长的、拥有所有权的、UTF-8编码的字符串类型。它在堆上分配内存,因此可以动态地增加或减少其长度。

&str

&str是一个字符串切片,它是一个指向某个字符串数据的引用。它不拥有数据,因此是不可变的。

2、创建字符串

创建String

rust">let mut s = String::new(); // 创建一个空的String
s.push_str("Hello, Rust!"); // 向String中添加内容

创建&str

rust">let data = "Hello, Rust!";
let s = &data; // 创建一个指向data的字符串切片

3、字符串操作

索引

在Rust中,字符串不能通过索引直接访问单个字符,因为它们是UTF-8编码的。但是,可以使用chars()方法迭代字符。

rust">for c in "Hello, Rust!".chars() {println!("{}", c);
}

切片

可以使用切片操作来获取字符串的一部分。

rust">let s = String::from("Hello, Rust!");
let slice = &s[7..12]; // 获取"Rust"这个切片

格式化

使用format!宏可以创建格式化的字符串

rust">let name = "World";
let greeting = format!("Hello, {}!", name);

字符串比较

字符串可以使用==!=运算符进行比较。

rust">assert_eq!("Hello", "Hello");
assert_ne!("Hello", "hello");

4、字符串和集合

字符串可以很容易地被放入集合中,如VecHashSet

rust">let mut words = vec!["Rust", "is", "awesome"];
words.push("and");

5、字符串的错误处理

在处理字符串时,可能会遇到一些错误,例如:

  • IndexError:尝试访问不存在的索引
  • Utf8Error:处理非UTF-8编码的字节序列

6、参考链接

  • Rust官方文档
  • Rust by Example

二、代码演示

1、代码演示

rust">fn main() {// 创建String和&strlet mut s = String::new();s.push_str("Hello, Rust!");let s_slice: &str = "Hello, Rust!";// 索引和切片for c in s.chars() {println!("{}", c);}let slice = &s[7..12]; // 应输出 "Rust"println!("{}", slice);// 格式化字符串let name = "World";let greeting = format!("Hello, {}!", name);println!("{}", greeting); // 应输出 "Hello, World!"// 字符串比较assert_eq!(s_slice, "Hello, Rust!");assert_ne!(s_slice, "hello, Rust!");// 字符串和集合let mut words = vec!["Rust", "is", "awesome"];words.push("and");assert_eq!(words, vec!["Rust", "is", "awesome", "and"]);// 测试字符串的错误处理// 注意:以下代码将会引发错误,仅作为示例,不应在实际代码中使用// let error_slice = &s[12..20]; // 这将引发panic,因为索引越界// println!("{}", error_slice);println!("All tests passed!");
}

2、执行结果

C:/Users/Administrator/.cargo/bin/cargo.exe run --color=always --package hello --bin helloFinished dev [unoptimized + debuginfo] target(s) in 0.00sRunning `target\debug\hello.exe`
H
e
l
l
o
,                R                
u                
s                
t                
!                
Rust!            
Hello, World!    
All tests passed!进程已结束,退出代码为 0

http://www.ppmy.cn/news/1444713.html

相关文章

搜维尔科技:TechViz中的手指跟踪:触摸3D模型并与之交互

TechViz中的手指跟踪:触摸3D模型并与之交互 搜维尔科技:TechViz中的手指跟踪:触摸3D模型并与之交互

AnolisOS8.8基于yum安装mariadb并配置远程访问

1 安装并启动MariaDB # 安装 dnf -y install mariadb-server # 设置开机启动并立即启动 systemctl enable --now mariadb2 配置root用户允许远程访问 mysql<<eof grant all privileges on *.* to root本机ip地址 identified by "Root123456!2"; flush privil…

CDA一级备考策略分享

但对于很多考生来说&#xff0c;没有备考经验&#xff0c;不知道应该如何备考&#xff1f;今天&#xff0c;我来指导大家应该如何备考&#xff0c;让大家充分准备&#xff0c;拿下CDA考试。在CDA考试大纲中为新考生讲解备考经验一下。 1、数据分析概述与职业操守、数据结构 考…

使用node调用chrome(基于selenium-webdriver包)

下载测试版chrome和chromedriver https://googlechromelabs.github.io/chrome-for-testing/ 把chromedriver复制到chrome的文件里 设置环境变量 编写代码 const { Builder, Browser, By, Key, until } require(selenium-webdriver) const puppeteer require(puppeteer)//查…

Django模板查找顺序

Django模板查找顺序 首先看django项目的settings.py文件中是否定义DIRS 如果有定义&#xff0c;首先去这个目录下面查找&#xff08;根目录下templates&#xff09;&#xff0c;找到了后续就不找了&#xff1b;如果没有&#xff0c;就顺着app的注册顺序进行查找

Agent AI智能体的未来

Agent AI智能体的未来 随着Agent AI智能体的智能化水平不断提高&#xff0c;它们在未来社会中的角色、发展路径以及可能带来的挑战也引起了广泛关注。快来分享一下你的看法吧~ 提醒&#xff1a;在发布作品前&#xff0c;请把不需要的内容删掉。 方向一&#xff1a;技术进步与…

微软如何打造数字零售力航母系列科普04 - 微软联合Adobe在微软365应用程序中工作时推出新的生成式AI功能

微软和Adobe正在合作&#xff0c;将情境营销见解和工作流程引入微软Copilot&#xff0c;以提供生成的人工智能功能&#xff0c;使营销人员和营销团队能够在自然的工作流程中实现更多目标。 这些新的集成功能将在生产力和协作工具&#xff08;如Outlook、Teams和Word&#xff0…

SpringBoot 自定义 HandlerMethodArgumentResolver 搞定xml泛型参数解析

文章目录 介绍一、解析简单 xml 数据案例引入 Jackson 的 xml 支持定义 Message 对象&MessageHeader 对象定义 Controller 方法调用结果 二、解析带泛型的 XML 数据案例2.1 直接给 Message 加上泛型 T2.2 无法直接解析泛型参数了 三、自定义 MVC 的参数解析器实现泛型参数解…