专业的JAVA编程教程与资源

网站首页 > java教程 正文

Rust 学习笔记-6 有趣的字符串(rust 例子)

temp10 2025-03-29 22:08:33 java教程 4 ℃ 0 评论

Rust 学习笔记, Rust 教程

往期回顾:

Rust 学习笔记-6 有趣的字符串(rust 例子)

Rust学习笔记-1 Rust 介绍.

Rust 学习笔记-2 环境安装

Rust学习笔记-2.1 rustup 镜像加速,飞起

Rust 学习笔记-3 Hello World

Rust学习笔记-4 Rust 基础数据类型

Rust 学习笔记-5 变量与常量



Rust 中的String类型可以分为2类.

  1. 字符串文本(&str)
  2. 字符串对象(String)

字符串文本

当字符串的值在编译时已知时,使用字符串文本(&str)。这些字符被编码成一个硬字符集。例如,让company=“my company”。字符串文本位于模块std::str中。字符串文本也称为字符串切片.

这实际上跟c语言里面的字符数组一个概念.


例子:

fn demo19() {
    let company: &str = "my company";
    let location: &str = "guangdong";
    println!("company is : {} location :{}", company, location);
}

fn main() {
    demo19();
}

默认情况下,字符串文字是静态的。这意味着字符串文本在整个程序期间都是有效的.

fn demo20() {
    let company: &'static str = "my company";
    let location: &'static str = "guangdong";
    println!("company is : {} location :{}", company, location);
}


fn main() {
    demo20();
}

上面2段程序输出的结果是一样的.

    Finished dev [unoptimized + debuginfo] target(s) in 0.48s
     Running `target\debug\hello-world.exe`
company is : my company location :guangdong

字符串对象(String Object).

标准库中提供了字符串对象类型。与字符串文本(string literal)不同,string对象类型不是核心语言的一部分。它被定义为标准库pub struct String中的公共结构。字符串是一个可增长的集合。它是可变的UTF-8编码类型。字符串对象类型可用于表示在运行时提供的字符串值。字符串对象在堆中分配。实际上是一个vector.

语法:

创建一个字符串对象.

String::new()

创建一个空白字符串对象.

String::from()

是不是感觉有点java的味道.

fn demo21() {
    let empty_string = String::new();
    println!("length is {}", empty_string.len());

    let content_string = String::from("my string");
    println!("length is {}", content_string.len());
}


fn main() {
    demo21();
}

第一个empty_string 创建了一个空白的字符串对象. 第二个从字符串文本创建一个字符串对象.

cargo run



字符串常用方法


new()

例如:

fn demo22() {
    let mut z = String::new();
    z.push_str("hello");
    println!("{}", z);
}

cargo run:


to_string()

栗子:

fn demo23() {
    let name1 = "Hello World Hello!".to_string();
    println!("{}", name1);
}

fn main() {
    demo23();
}

cargo run:


replace()

replace()函数接受两个参数,

第一个参数是要搜索的字符串模式,

第二个参数是要替换的新值。

看下面的的示例中,Hello在name1字符串中出现两次

fn demo24() {
    let name1 = "Hello Rust, Hello!".to_string();         //字符串对象
    let name2 = name1.replace("Hello", "Hi");    //查找并替换.
    println!("{}", name2);
}

fn main() {
    demo24();
}

cargo run:


as_str()

提取包含整个字符串的字符串切片,直接将String对象转换成了字符数组了.

fn demo25() {
    let example_string = String::from("示例字符串,哈哈");
    print_literal(example_string.as_str());
}

fn print_literal(data: &str) {
    println!("displaying string literal {}", data);
}


fn main() {
    demo25();
}

cargo run:



push()

将给定的字符追加到字符串的末尾

栗子:

fn demo26() {
    let mut company = "Tutorial".to_string();
    company.push('s');
    println!("{}", company);

}

fn main() {
    demo26();
}

cargo run:


len()

len()返回字符总数包括空格.

fn demo27() {
    let fullname = " Tutorials";
    println!("length is {}", fullname.len());
}

fn main() {
    demo27();
}

cargo run:



trim()

去掉字符串前后的空格. 不会去掉中间的空格.

fn demo28() {
    let fullname = " Rust is       Good! \r\n";
    println!("Before trim ");
    println!("length is {}", fullname.len());
    println!();
    println!("After trim ");
    println!("length is {}", fullname.trim().len());
}

fn main() {
    demo28();
}

cargo run:


split_whitespace()

split_whitespace() 输入字符串拆分为不同的字符串。它返回一个迭代器. 所以只要循环这个迭代器每个元素. 如下例:

fn demo29() {
    let msg = "Rust is a good programing language".to_string();
    let mut i = 1;

    for token in msg.split_whitespace() {
        println!("token {} {}", i, token);
        i += 1;
    }
}

fn main() {
    demo29();
}

cargo run



split()

string()返回模式匹配的字符分割的字符串迭代器。 split()方法的局限性是无法存储结果以供以后使用。collect方法可用于将split()返回的结果存储vector.

fn demo30() {
    let fullname = "张全蛋,李子柒,王二";
    for token in fullname.split(",") {
        println!("token is {}", token);
    }

    println!("\n");
    let tokens: Vec<&str> = fullname.split(",").collect();
    println!("第一  {}", tokens[0]);
    println!("第二  {}", tokens[1]);
    println!("第三  {}", tokens[2]);
}

fn main() {
    demo30();
}

cargo run:



用 "+" 运算符 连接字符串

字符串可以通过+ 连接起来. 其实就是把后一个加到前一个里面去.


fn demo31() {
    let n1 = "Hello ".to_string();
    let n2 = "Rust".to_string();
    let n3 = n1 + &n2; // n2 是引用.
    println!("{}", n3);
}

fn main() {
    demo31();
}

cargo run:



类型转换

比如将整数转成字符串.

fn demo32() {
    let number = 2020;
    let number_as_string = number.to_string();
    // 转换数字到字符串.
    println!("{}", number_as_string);
    println!("{}", number_as_string == "2020");
}

fn main() {
    demo32();
}

cargo run:


字符串连接的另一个方法 format! 宏.

使用format!宏也可以实现连接2个字符串.

用法如下:

fn demo33() {
    let n1 = "Hello ".to_string();
    let n2 = "Rust ".to_string();
    let n3 = format!("{} {}", n1, n2);
    println!("{}", n3);
}

fn main() {
    demo33();
}

cargo run:

标准库字符串内置了很多方法. 可参考:

https://doc.rust-lang.org/std/string/struct.String.html


今天太晚了,就到这里!欢迎大家一起交流!


本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表