首页 > 其他分享 >Rust中 String、str、&str、char 的区别

Rust中 String、str、&str、char 的区别

时间:2024-07-10 17:41:12浏览次数:8  
标签:字符 slice String char let str 字符串

先上结论

  • String 是动态分配在堆上的可变长度字符串类型。
  • str 是字符串切片类型,通常以 &str 的形式出现,用于引用字符串字面量或 String 的一部分。
  • &str 是字符串字面量的类型,以双引号创建,通常用于传递字符串数据的引用。
  • char 是单个 Unicode 字符类型,以单引号创建,用于表示单个字符。

String

String 是 Rust 中的可变长度字符串类型,它允许动态增长和修改。String 类型的数据存储在堆上,因此它们能够在运行时根据需要分配或释放内存。String 类型实现了 Deref<Target=str>,因此可以直接当作 &str 使用。

示例代码:

// 创建一个空的 String
let mut s = String::new();

// 从字符串字面量创建 String
let data = "initial contents";
let s = data.to_string(); // 或者 let s = String::from(data);

// 追加字符串
s.push_str(" more content");

// 添加单个字符
s.push('!');

println!("{}", s); // 输出: initial contents more content!

str

str 是 Rust 中的字符串切片类型,它通常以不可变引用 &str 的形式出现。str 类型通常用于指向字符串字面量或 String 的部分内容,它存储在程序的静态存储区或堆上(当作 &str 时)。

示例代码:

// 字符串字面量是 &str 类型
let hello: &str = "Hello, world!";

// 从 String 获取 &str
let s = String::from("Hello");
let slice: &str = &s;

// 使用 &str 参数的函数
fn takes_slice(slice: &str) {
    println!("Got slice: {}", slice);
}
takes_slice("Hello");

&str

&str 表示对字符串的引用,通常用于函数参数和字符串切片操作。它是 Rust 中常见的用于传递字符串数据的方式,因为它不需要拥有字符串的所有权,而是简单地借用它。

示例代码:

// &str 作为函数参数
fn print_length(s: &str) {
    println!("Length of '{}' is {} bytes", s, s.len());
}
let message = "hello";
print_length(message);

// 字符串切片操作
let s = "abcdef";
let slice = &s[1..4]; // 切片操作,获取部分字符串
println!("{}", slice); // 输出: bcd

char

char 表示 Rust 中的单个字符,它使用单引号 ' 包裹。在 Rust 中,字符是 Unicode 标量值,每个字符占用 4 字节。char 类型提供了对单个字符的处理和操作能力。

示例代码:

// 创建单个字符
let c: char = 'a';

// 遍历字符串中的字符
for c in "hello".chars() {
    println!("{}", c);
}

// 判断字符是否是数字
let c = '7';
if c.is_digit(10) {
    println!("'{}' is a digit", c);
}

标签:字符,slice,String,char,let,str,字符串
From: https://www.cnblogs.com/azoux/p/18294699

相关文章

  • Echarts-x轴数据换行显示
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><metahttp-equiv="X-UA-Compatib......
  • echarts 如何设置 legend 展示为虚线或者实线
    文章目录一、操作步骤1.找虚线或者实线的svg2.echarts中legend部分的完整代码3.预览效果总结一、操作步骤1.找虚线或者实线的svg在阿里巴巴矢量图标库里面找相应的内容。截图:复制里面的svg代码如下(实线举例):<svgt="1720600860976"class="icon"viewBox="00......
  • 利用 ECharts 地图:实现纹理和图像的效果(上海json)
    注:shanghaiGeoJSON换为你需要的区域json<template><divref="mapContainer"style="width:100%;height:500px"></div></template>import*asechartsfrom'echarts';importshanghaiGeoJSONfrom'@/assets......
  • 机器学习策略篇:详解如何使用来自不同分布的数据,进行训练和测试(Training and testing o
    如何使用来自不同分布的数据,进行训练和测试深度学习算法对训练数据的胃口很大,当收集到足够多带标签的数据构成训练集时,算法效果最好,这导致很多团队用尽一切办法收集数据,然后把它们堆到训练集里,让训练的数据量更大,即使有些数据,甚至是大部分数据都来自和开发集、测试集不同的分布。......
  • echarts——横坐标轴文字过长如何换行
    横坐标轴文字过长,想要换行实现如下效果具体实现代码如下:axisLabel:{show:true,interval:0,formatter:function(value){varret="";//拼接加\n返回的类目项varma......
  • Windows LAPS(Local Administrator Password Solution)是一种由微软提供的工具和解决方
    WindowsLAPS(LocalAdministratorPasswordSolution)是一种由微软提供的工具和解决方案,旨在管理Windows操作系统中本地管理员账户的密码。它的设计初衷是提高系统安全性,特别是防止在企业环境中多台计算机上使用相同的本地管理员密码所带来的安全风险。特点和工作原理个性化密......
  • 对Stream函数式编程的理解
    什么是StreamStream被翻译为流,它的工作过程像将一瓶水导入有很多过滤阀的管道一样,水每经过一个过滤阀,便被操作一次,比如过滤,转换等,最后管道的另外一头有一个容器负责接收剩下的水。示意图如下:首先通过source产生流,然后依次通过一些中间操作,比如过滤,转换,限制等,最后结束对流的操......
  • react或vue中页面多个echarts,只有最后一个能自适应的处理方法
    页面多个echarts时,自适应绑定方式必须是addEventListenerwindow.addEventListener("resize",()=>{myChart.resize();myChart2.resize();})myChart,myChart2是echart实例   ......
  • Stream流
    filterfilter:过滤,就是过滤器,符合条件的通过,不符合条件的过滤掉;//筛选出成绩不为空的学生人数count=list.stream().filter(p->null!=p.getScore()).count();mapmap:映射,他将原集合映射成为新的集合//取出所有学生的成绩List<Double>scoreList=list.stream().map(p-......
  • Java字符串(String、字符串拼接、原理)
    文章目录一、String字符串1.1创建方式【直接赋值、new一个对象】1.1.1使用字符串字面值直接赋值:(1)字符串字面量创建String对象的转换过程(2)一些方法(3)说明1.1.2使用`new`关键字创建字符串对象,将内容赋值给变量:(1)`String`类有多个构造函数,其中一些常用的包括:(2)说明(3)引用的......