Rust类型之字符串

这篇具有很好参考价值的文章主要介绍了Rust类型之字符串。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

字符串

Rust 中的字符串类型是String。虽然字符串只是比字符多了一个“串”字,但是在Rust中这两者的存储方式完全不一样,字符串不是字符的数组,String内部存储的是Unicode字符串的UTF8编码,而char直接存的是Unicode Scalar Value
Rust字符串对Unicode字符集有着良好的支持,可以看一下示例:

let hello = String::from("こんにちは");
let hello = String::from("Dobrý den");
let hello = String::from("Hello");
let hello = String::from("שָׁלוֹם");
let hello = String::from("नमस्ते");
let hello = String::from("안녕하세요");
let hello = String::from("你好");
let hello = String::from("Olá");
let hello = String::from("السلام عليكم");
let hello = String::from("Здравствуйте");
let hello = String::from("Hola");

Rust 中的String不能通过下标去访问。

let testString = String::from("天下");
let s = testString[0]; // 你可能想把“天”字取出来,但实际上这样是错误的

String存储的Unicode序列的UTF8编码,而UTF8编码是变长编码。上边即使能访问成功,也只能取出一个字符的 UTF8 编码的第一个字节,很可能是没有意义的。因此 Rust 直接对String禁止了这个索引操作。

字符串字面量中的转义

与 C 语言一样,Rust 中转义符号也是反斜杠\,可用来转义各种字符。

fn main() {
    // 将""号进行转义
    let byte_escape = "I'm saying \"Hello\"";
    println!("{}", byte_escape); 
    //输出的内容为 I'm saying "Hello"
    
    // 分两行打印
    let byte_escape = "I'm saying \n 你好";
    println!("{}", byte_escape);
    //输出的内容是
    // I'm saying
    // 你好
    
    // Windows下的换行符
    let byte_escape = "I'm saying \r\n 你好";
    println!("{}", byte_escape);
    //输出的内容是
    // I'm saying
    // 你好
    
    
    // 打印出 \ 本身
    let byte_escape = "I'm saying \\ Ok";
    println!("{}", byte_escape);
    //输出的内容是  I'm saying \ Ok
    
    // 强行在字符串后面加个0,与C语言的字符串一致。
    let byte_escape = "I'm saying hello.\0";
    println!("{}", byte_escape);
     //输出的内容是 I'm saying hello.
}

Rust类型之字符串,rust学习,rust,开发语言,后端

Rust 还支持通过\x输入等值的 ASCII 字符,以及通过\u{}输入等值的 Unicode 字符。

fn main() {
    // 使用 \x 输入等值的ASCII字符(最高7位)
    let byte_escape = "I'm saying hello \x7f";
    println!("{}", byte_escape);
    
    // 使用 \u{} 输入等值的Unicode字符(最高24位)
    let byte_escape = "I'm saying hello \u{0065}"; // 0065表示的是十六进制 65,也是十进制 101
    println!("{}", byte_escape);
}

Rust类型之字符串,rust学习,rust,开发语言,后端

禁止转义的字符串字面量

我们要是想输出原始字面量,也就是不进行转义,使用 r""r#""#把字符串字面量套起来就行了。

fn main() {
    // 字符串字面量前面加r,表示不转义
    let test_str = r"test \x7f \u{0066}";
    println!("{}", test_str);
    
    // 这个字面量必须使用r##这种形式,因为我们希望在字符串字面量里面保留""
    let test_string = r#"He says: "Work hard and make progresses everyday""#;
    println!("{}", test_string );
    
    // 如果遇到字面量里面有#号的情况,可以在r后面,加任意多的前后配对的#号,
    // 只要能帮助Rust编译器识别就行
    let test_string1 = r###"A string has "# in it. And even "##!"###;
    println!("{}", test_string1);
}

Rust类型之字符串,rust学习,rust,开发语言,后端

字节串

很多时候,我们只需要 ASCII 字符集,字符串字面量中用不到Unicode字符。对于这种问题,Rust 还有一种更紧凑的表示法:字节串。用b开头,双引号括起来,比如b"this is a byte string"。这时候字符串的类型已不是字符串,而是字节的数组 [u8; N]N为字节数。示例代码如下:

fn main() {
    // 字节串的类型是字节的数组,而不是字符串了
    let bytestring: &[u8; 21] = b"this is a byte string";
    println!("A byte string: {:?}", bytestring);
    
    // 可以看看下面这串打印出什么
    let escaped = b"\x52\x75\x73\x74 as bytes";
    println!("Some escaped bytes: {:?}", escaped);

    // 字节串与原始字面量结合使用
    let raw_bytestring = br"\u{211D} is not escaped here";
    println!("{:?}", raw_bytestring);
}

Rust类型之字符串,rust学习,rust,开发语言,后端

我是知识星球上约有3万人的AI破局俱乐部初创合伙人,我的微信号是zhaoseaside,欢迎大家加我,相互学习AI知识和个人IP知识,毕竟这是未来两大风口。文章来源地址https://www.toymoban.com/news/detail-784424.html

到了这里,关于Rust类型之字符串的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【编程】Rust语言入门第4篇 字符串

    Rust 中的字符是 Unicode 类型,因此每个字符占据 4 个字节内存空间,但字符串不一样,字符串是 UTF-8 编码,也就是字符串中的字符所占的字节数是变化的(1 - 4)。 常见的字符串有两种: str,通常是引用类型, str ,即字符串字面常量,字符串切片。 std::string::String 类型 str 的变

    2024年02月20日
    浏览(15)
  • rust字符串

    rust字符串

    诸位在入门rust的时候,要认真,因为字符串类型在rust中有好几种,一不小心就搞混了类型,导致代码编译报错。好在有强大的rust-analyzer和vscode帮助我们。我们直接通过一段代码来开始认识rust的字符串类型。 首先,我们还是从字符串字面值来谈起,在rust中,字符串字面值常

    2024年02月02日
    浏览(10)
  • rust 字符串(String)详解

    rust 字符串(String)详解

    rust中的 String ,是一个非常常用的 crate ,它的底层涉及到了rust中的所有权概念,不过这不是本章的内容,如果对rust所有权概念感兴趣的,可以查看另一篇文章:rust所有权 本文的目的还是介绍 String 的基本用法,以及有哪些常用的函数可以使用 字符串,也就是由一系列字符

    2024年02月03日
    浏览(12)
  • 30天拿下Rust之字符串

    概述         在Rust中,字符串是一种非常重要的数据类型,用于处理文本数据。Rust的字符串是以UTF-8编码的字节序列,主要有两种类型:str和String。其中,str是一个对字符数据的不可变引用,更像是对现有字符串数据的“视图”,而String则是一个独立、可变更的字符串实

    2024年03月12日
    浏览(9)
  • rust里如何判断字符串是否相等呢?

    在 Rust 中,有几种方法可以判断字符串是否相等。下面是其中几种常见的方法: 使用 == 运算符:可以直接使用 == 运算符比较两个字符串是否相等。例如: 这段代码会输出 “字符串不相等”,因为 str1 和 str2 不是相同的字符串。 2. 使用 eq 方法:字符串类型实现了 PartialEq

    2024年02月14日
    浏览(66)
  • 算法leetcode|87. 扰乱字符串(rust重拳出击)

    使用下面描述的算法可以扰乱字符串 s 得到字符串 t : 如果字符串的长度为 1 ,算法停止 如果字符串的长度 1 ,执行下述步骤: 在一个随机下标处将字符串分割成两个非空的子字符串。即,如果已知字符串 s ,则可以将其分成两个子字符串 x 和 y ,且满足 s = x + y 。 随机

    2024年02月05日
    浏览(12)
  • Rust中的字符串处理及相关方法详解

    在Rust中,字符串是一种非常重要的数据类型,而 String 类型则提供了对动态可变字符串的支持。本文将介绍一些常见的字符串处理方法以及相关示例代码。 在Rust中,有多种方式创建字符串,以下是一些常见的例子: push_str()方法 push_str() 方法用于将一个字符串切片附加到 S

    2024年02月19日
    浏览(9)
  • 没有jodatime,rust里怎么将字符串转为日期呢?

    在 Rust 中,有多种方法可以在时间和字符串之间进行转换。以下是五种常见的方式:

    2024年02月14日
    浏览(11)
  • Rust每日一练(Leetday0029) 柱状图、最大矩形、扰乱字符串

    Rust每日一练(Leetday0029) 柱状图、最大矩形、扰乱字符串

    目录 84. 柱状图中最大的矩形 Largest-rectangle-in-histogram  🌟🌟🌟 85. 最大矩形 Maximal Rectangle  🌟🌟🌟 87. 扰乱字符串 Scramble String  🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给定  n

    2024年02月09日
    浏览(16)
  • 【零基础学Rust | 基础系列 | 数据结构】元组,数组,向量,字符串,结构体

    【零基础学Rust | 基础系列 | 数据结构】元组,数组,向量,字符串,结构体

    在Rust编程语言中,数据结构是组织和存储数据的一种方式,它们使得数据可以高效地被访问和操作。本章将详细介绍元组,数组,向量,字符串,和结构体这几种基本的数据结构。 元组是Rust编程语言中的一种复合数据类型,它可以包含多个值,这些值可以是不同类型。元组

    2024年02月11日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包