rust中字符串String常用方法和注意事项

Rust 中通常说的字符串指的是:String 和 &str(字符串字面值、或者叫字符串切片)这两种类型。str是rust中基础字符串类型,String是标准库里面的类型。Rust 中的字符串本质上是:Byte的集合(Vec<u8>)

基础类型转换成字符串

let one = 1.to_string();         // 整数到字符串
let float = 1.3.to_string();     // 浮点数到字符串
let slice = "slice".to_string(); // 字符串切片到字符串

String 的拼接

操作解释
push_str()方法把一个字符串切片附加到 String
push() 方法把单个字符附加到 String
+连接字符串
format!()灵活拼接多个字符串

示例:

fn main() {let mut s1 = String::from("He");s1.push_str("llo, ");let mut s2 = String::from("world");s2.push('!');//等号后面的第一个变量取得所有权,其他加号后面的都是变量的引用let s3 = s1 + &s2;println!("{}", s3);//这行代码报错,s1的所有权已经转移//println!("{}", s1);println!("{}", s2);let c1 = String::from("we");let c2 = String::from("need");let c3 = String::from("to");let c4 = String::from("use");let c5 = String::from("format()!");//使用format,不会取得任何参数的所有权let s4 = format!("{} {} {} {} {}", c1, c2, c3, c4, c5);println!("{}", s4);
}

Rust中字符串不支持索引语法访问,原因:

  • Sting里面的字符索引并不总是能对应到一个有效的Unicode标量值。
  • 索引操作应消耗一个常量时间(O(1)),而 String 无法保证,需要遍历所有内容,来确定有多少个合法的字符。

示例:

fn main() {// 梵文书写的印度语单词let hello = String::from("नमस्ते");//以字节的形式输出//输出结果:224 164 168 224 164 174 224 164 184 224 165 141 224 164 164 224 165 135for i in hello.bytes() {print!(" {}", i)}println!();//以Unicode标量值的形式输出//输出结果: न म स ् त  े%for i in hello.chars() {print!(" {}", i)}//以字形簇的形式输出,标准库不提供,可以在crates.io网站上找第三方库
}

使用注意事项

使用字符串split切割的时候,传递的参数必须是&str类型,可以是单个字符,也可以是多个字符,切割完之后,得到的结果需要转为集合才可以获取到的想要的数据。

按字符切割


fn main() {let text = "apple,banana,cherry";let fruits: Vec<&str> = text.split(',').collect();println!("{:?}", fruits); // Output: ["apple", "banana", "cherry"]
}

按字符串分割

要按字符串模式而不是单个字符进行分割,您可以split轻松地使用该方法。


let text = "apple>>banana>>cherry";
let fruits: Vec<&str> = text.split(">>").collect();
println!("{:?}", fruits); // Output: ["apple", "banana", "cherry"]

用闭包分割

对于更复杂的拆分逻辑,您可以传递一个闭包来split确定拆分逻辑。


fn main() {let text = "apple1banana2cherry";let fruits: Vec<&str> = text.split(|c: char| c.is_numeric()).collect();println!("{:?}", fruits); // Output: ["apple", "banana", "cherry"]
}

split_whitespace
split_whitespace方法是一种按空格分割字符串的便捷方法。

fn main() {let text = "apple banana cherry";let fruits: Vec<&str> = text.split_whitespace().collect();println!("{:?}", fruits); // Output: ["apple", "banana", "cherry"]
}

split_once

有时,您可能希望在模式第一次出现时将字符串分成两部分。该split_once方法非常适合于此。

fn main() {let text = "apple,banana,cherry";if let Some((first, rest)) = text.split_once(',') {println!("First fruit: {}", first); // Output: "First fruit: apple"println!("The rest: {}", rest); // Output: "The rest: banana,cherry"}
}

拆分并保留结果中的模式

Rust 还允许拆分,而不会忽略结果子字符串中的模式。split_inclusive方法在分割后将模式包含在子串中

fn main() {let text = "apple,banana,cherry";let fruits: Vec<&str> = text.split_inclusive(',').collect();println!("{:?}", fruits); // Output: ["apple,", "banana,", "cherry"]
}

处理空子字符串

请注意,如果存在连续的分割模式,split方法将包含空子字符串。

fn main() {
let text = "apple,,banana,,,cherry";
let fruits: Vec<&str> = text.split(',').collect();
println!("{:?}", fruits); // Output: ["apple", "", "banana", "", "", "cherry"]
}

为了避免空字符串,您可以使用filter排除它们。

fn main() {let text = "apple,,banana,,,cherry";let fruits: Vec<&str> = text.split(',').filter(|&s| !s.is_empty()).collect();println!("{:?}", fruits); // Output: ["apple", "banana", "cherry"]
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/286749.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javaWeb在线考试系统

一、简介 在线考试系统是现代教育中一项重要的辅助教学工具&#xff0c;它为学生提供了便捷的考试方式&#xff0c;同时也为教师提供了高效的考试管理方式。我设计了一个基于JavaWeb的在线考试系统&#xff0c;该系统包括三个角色&#xff1a;管理员、老师和学生。管理员拥有菜…

特别澄清:关于ChatGPT辅助论文写作的重要说明

“高扬&#xff0c;快&#xff0c;教我用ChatGPT写论文&#xff0c;明天要交稿&#xff01;” “高师傅&#xff0c;ChatGPT如何能生成调查数据&#xff0c;我想直接拿来用。” “高老师&#xff0c;ChatGPT能不能一下子把论文生成出来&#xff0c;不用修改&#xff0c;直接就能…

微信小程序实战:无痛集成腾讯地图服务

在移动互联网时代,地图服务无疑是应用程序中最常见也最实用的功能之一。无论是导航定位、附近搜索还是路线规划,地图服务都能为用户提供极大的便利。在微信小程序开发中,我们可以轻松集成腾讯地图服务,为小程序赋能增值体验。本文将详细介绍如何在微信小程序中集成使用腾讯地图…

代码随想录算法训练营第四十六天|139.单词拆分、56. 携带矿石资源(第八期模拟笔试)

139.单词拆分 刷题https://leetcode.cn/problems/word-break/description/文章讲解https://programmercarl.com/0139.%E5%8D%95%E8%AF%8D%E6%8B%86%E5%88%86.html视频讲解https://www.bilibili.com/video/BV1pd4y147Rh/?vd_sourceaf4853e80f89e28094a5fe1e220d9062 题解&…

【Rust】——提取函数消除重复代码和泛型

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

【Git】日志功能

1. git日志显示 # 显示前3条日志 git log -3# 单行显示 git log --oneline# 图表日志 git log --graph# 显示更改摘要 git log --stat# 显示更改位置 git log --patch 或 git log -p# 查看指定文件的提交历史记录 git log {filename}例子1&#xff1a;单行显示 例子2&#xff…

基于springboot+vue的客户信息管理系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

C++ primer 第十五章

1.OPP:概述 面向对象程序设计的核心思想是数据抽象、继承和动态绑定。 通过继承联系在一起的类构成一种层次关系&#xff0c;在层次关系的根部的是基类&#xff0c;基类下面的类是派生类 基类负责定义在层次关系中所有类共同拥有的成员&#xff0c;而每个派生类定义各自特有…

原生数据开发软件 TablePlus for mac

一款非常好用的本地原生数据开发软件&#xff1a;TablePlus激活版。 软件下载&#xff1a;TablePlus for mac v3.11.0激活版 这款优秀的数据库编辑工具支持 MySQL、SQL Server、PostgreSQL 等多种数据库&#xff0c;具备备份、恢复、云同步等功能。它可以帮助您轻松编辑数据库中…

新能源汽车充电桩消防安全视频智能可视化监管建设方案

一、方案背景 据应急管理部门统计公布的数据显示&#xff0c;仅2023年第一季度&#xff0c;新能源汽车自燃率就上涨了32%&#xff0c;平均每天就有8辆新能源汽车发生火灾&#xff08;含自燃&#xff09;。在已查明起火原因中&#xff0c;58%源于电池问题&#xff0c;19%源于碰…

【Unity】UI九宫格

什么是九宫格&#xff1f; 顾名思义&#xff0c;九宫格就是指UI切成9个格子&#xff0c;9个格子可以任意拉伸。 1、3、7、9不拉伸。 2、8水平拉伸。 4、6垂直拉伸。 5既可以水平也可以垂直拉伸。 怎么切九宫格&#xff1f; 选中图片&#xff0c;改成Sprite模式&#xff0c;点…

2015年认证杯SPSSPRO杯数学建模D题(第二阶段)城市公共自行车全过程文档及程序

2015年认证杯SPSSPRO杯数学建模 D题 城市公共自行车 原题再现&#xff1a; 城市交通问题直接影响市民的生活和工作。在地形平坦的城市&#xff0c;公共自行车出行系统是一种很好的辅助手段。一般来说&#xff0c;公共自行车出行系统由数据中心、驻车站点、驻车桩、自行车&…

基于nodejs+vue家装一体化平台python-flask-django-php

提高现下家装一体化平台的准确度&#xff0c;同时降低经济波动带来的不良影响&#xff0c;希望本文能对广大学者的研究提供参考。 前端技术&#xff1a;nodejsvueelementui, Express 框架于Node运行环境的Web框架, 语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&am…

C语言 汉诺塔问题

目录 1.前言 2.问题描述 3.问题分析 4.定义一个主函数 5.再定义一个hanoi函数 6.所有代码 7.结语 1.前言 汉诺塔问题&#xff0c;是心理学实验研究常用的任务之一。该问题的主要材料包括三根高度相同的柱子和一些大小及颜色不同的圆盘&#xff0c;三根柱子分别为起始柱A…

TextMeshPro图文混排的两种实现方式,不打图集

TMP图文混排 方案一&#xff1a;TMP自带图文混排使用方法打包图集使用 方案二&#xff1a;不打图集&#xff0c;可以使用任何图片 接到一个需求&#xff0c;TextMeshPro 图文混排。 方案一&#xff1a;TMP自带图文混排 优点布局适应优秀&#xff0c;字体左中右布局位置都很不错…

Elasticsearch8 - Docker安装Elasticsearch8.12.2

前言 最近在学习 ES&#xff0c;所以需要在服务器上装一个单节点的 ES 服务器环境&#xff1a;centos 7.9 安装 下载镜像 目前最新版本是 8.12.2 docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.2创建配置 新增配置文件 elasticsearch.yml http.host…

费曼学习法:快速掌握新知识!

首先&#xff0c;讲一个关于学习法则的小故事。 马克思普朗克在1918年荣获诺贝尔物理学奖之后&#xff0c;他就在全德国作巡回报告。 不管被邀请到哪里&#xff0c;他就会对新的量子力学演讲一番。 因此&#xff0c;慢慢他的司机也对他的报告烂熟于心&#xff0c;于是就告诉他。…

Java中 List 集合,通过 Stream 流进行排序总结

一、数据准备 public class OrderTest {private String channelCode;private BigDecimal rate;// 省略 getter、setter、toString()、constructor }List<OrderTest> orderTestList new ArrayList<>();OrderTest z09 new OrderTest("Z09", new BigDeci…

是德科技KEYSIGHT E4990A阻抗分析仪

181/2461/8938产品概述: E4990A 阻抗分析仪具有 20 Hz 至 120 MHz 的频率范围&#xff0c;可在宽阻抗范围内提供出色的 0.045%&#xff08;典型值&#xff09;基本准确度&#xff0c;并内置 40 V 直流偏置源&#xff0c;适用于元器件、半导体和材料测量。 无论研发、生产、质…

SpringMvc执行流程源码解析

一、简介 Spring web Mvc是基于ServletApi构建的原始Web模块&#xff0c;从一开始就包含在Spring框架中&#xff1b; 从Servlet到SpringMvc 最典型的MVc就是JSPServletjavaBean的模式&#xff1b; 弊端&#xff1a; 1、xml下配置Servlet的映射非常麻烦&#xff0c;效率低&…